새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

3 분 소요

📌 2025-03-30 TIL

1. 오늘의 학습 주제

  • 병행성과 병행 프로세스, 그리고 동시 라는 의미
  • 독립 프로세스를 이해하면서 불변 객체도 같이 이해해보기

2. 학습 내용

병행성(concurrency)는 여러 개의 프로세스 또는 여러 개의 쓰레드가 동시에 실행되는 시스템의 특성을 말합니다.

병행성을 사람으로 비유하면 공부를 하다가, 방청소를 시작하고, 친구에게 온 문자를 확인하고 답장하는 환경을 말합니다.

동시

하나의 작업이 끝나지 않았는데, 다른 작업을 시작하는 것을 말합니다.

그러면 컴퓨터 과학에서 말하는 동시성이란

하나의 프로세스나 하나의 쓰레드가 실행을 시작한후 종료 상태가 되지 않은 상태 에서 다른 프로세스나 쓰레드가 실행되는 환경을 의미합니다.

한 명이 공부를 하다가 오늘 공부치를 끝내지 않고, 친구에게 온 문자를 확인하고 답장해야지 했는데 방이 너무 더러워 보여서 방청소를 시작하는 것을 말합니다. 지금 상황을 보면 공부, 문자 답장, 방청소가 모두 종료되지 않은 상태에서 새로운 프로세스가 시작되었습니다.

인터리빙과 병렬성

바둑 기사와 아이들은 인터리빙입니다.

병행성은 인터리빙으로 구현 될 수 있고, 병렬성으로 구현될 수 있습니다.

단일 프로세스에서는 인터리빙으로 병행성을 구현한다.

  • 사람은 한 명이지만, 대국 참가자는 수 십명이 됩니다. 그래도 바둑기사는 혼자 돌아다니면서 아이들의 상태나 조언들 해주는 상황인거죠 그래서 아이들 한명의 대국은 끝나지 않은 상태로 새로운 아이와 대국을 하게 됩니다. 하나의 프로세서(CPU)가 병행성을 갖는다면 인터리빙으로 하나의 프로세스나 하나의 쓰레드의 작업을 짧게 처리하고 다음 작업으로 넘어가다보니 여러 프로세스가 동시에 수행되는 병행성을 보이게 됩니다.

톨게이트는 병렬성입니다.

  • 멀티 프로세서(CPU)로 여러 개의 톨게이트를 통해 여러 쓰레드나 프로세스 들이 실행되는 것을 말합니다.

  • 멀티 프로세서는 다시 강결합 시스템과 약결합 시스템이 있습니다.

  • 강결합은 하나의 운영체제가 모든 CPU와 시스템 하드웨어를 제어하는 것을 말합니다.

  • 약결합은 2개 이상의 독립된 컴퓨터 시스템이며 컴퓨터 시스템이 네트워크로 연결되었습니다.

    시스템 간의 통신은 메세지 전달이나 원격 프로시저 호출인(Remote Procedure Calls)

    약 결합 시스템에는 클러스터 구조가 사용됩니다.

짧게 정리

지금와서 정리해보니 병행성, 동시, 병렬성은 다른 말이였습니다.

병행성 - 작업들을 동시에 수행되는 시스템의 특성을 말한다.

동시 - 작업이 완전하게 종료되지 않았는데 새로운 것을 시작하는 환경

병렬성 - 여러 개의 프로세스를 여러 개의 프로세서로 실행하는 시스템을 말한다.

병행 프로세스- 동시에 수행되는 여러 개의 프로세스나 쓰레드를 병행 프로세스라고 한다.

독립 프로세스

독립 프로세스는 실행 중인 다른 프로세스에 영향을 주지 않고, 받지도 않은 것을 말합니다.

혼자 실행되고 종료 상태로 가기까지 다른 프로세스와 관련이 없이 동작한다는 의미입니다.

독립 프로세스는 결정적(deterministic)이며, 재생 가능하다고 합니다

다른 프로세스에 영향을 받지 않기 때문에 입력만 동일하다면 실행 결과는 언제나 같습니다.

이해하기

독립 프로세스와 같은 것은 타이머라고 생각합니다.

한국에 잇건, 비가 오건, 눈이 오나 상관없이 지정한 시간이 되면 울리게 됩니다.

중간에 오류가 발생해도 다이머를 시작하면 똑같이 재생이 가능합니다.

그리고 결정적이라는 말은 생소하지만 한자로 확실하다. 바뀔수 없을 만큼 확실하다라고 합니다.

언제나 어디서나 누구나 똑같이 입력만 한다면 원숭이가 타이머를 돌려도 , 사람이 돌려도 타이머는 똑같이 실행됩니다.

불변 객체도 이와 비슷하다고 느꼈습니다.

자신의 속성이 고정되어 언제 어디서나 동일한 기능과 상태를 가지고 있습니다.

만약 다른 곳에서 사용하고 왓다고 하더라도 결정적으로 동일한 상태를 가지고 있다는 것을 알 수 있습니다.

불변 객체는 내부에 어떤 상태도 다른 객체가 변경할 수 없으며 불변 객체도 다른 객체의 상태를 변경하지 않는 것이 맞다고 생각됩니다.

협력 프로세스

협력 프로세스는 실행중인 다른 프로세스에 영향을 주고 받는 것을 말합니다.

예를 들면, 하나의 프로세스가 파일을 읽고, 다른 프로세스가 그 데이터를 처리해서 결과를 출력하는 경우가 그렇습니다.

병행성 문제

병행성은 여러 프로세스나 쓰레드가 동시에 실행되는 시스템 특성이라고 설명했습니다.

프로세스나 쓰레드나 동시에 실행이 되다보면 효율적인 작업을 위해 협력 프로세스나 협력 쓰레드를 사용하게 됩니다.

서로에게 영향을 줄 수 있다보니 결정적이지 못하게 되며, 그러다보면 신뢰할 수 없는 결과가 나올 수 있는데 그게 병행성 문제입니다.

상호배제

상호배제(mutual exclusion)은 여러 프로세스나 스레드가 공유 자원을 다루는 임계영역에 동시에 들어가지 못하도록 하는 매커니즘 입니다.

임계 영역은 2개 이상의 프로세스나 스레드가 동시에 접근하면 안되는 공유 자원을 다루는 코드 구간을 의미합니다.

예를 들어, 여름에 실내 온도가 29도로 더워서 여러 사람들이 에어컨을 켜려고 합니다. 에어컨이라는 공유 자원을 제어하는 리모콘을 도시에 여러 사람이 사용하면, 한 사람은 20도로 다른 사람은 25도로 설정 할 수 있어서 결과적으로 온도가 어떻게 된지 알 수 없습니다.

상호 배제는 한 사람이 리모콘을 사용중 일 때(임계영역) 다른 사람들이 접근하지 못하게 막아서 온도 설정을 예측할 수 있게 합니다.

동기화

프로세스 동기화는 2개 이상의 프로세스에 대한 처리 순서를 조율하는 것입니다.

위 예시를 동일하게 들을 수 있습니다.

예를 들어 지금 방 온도가 29도입니다.

  1. 짱구 사원이 29도로 읽습니다.

  2. 둘리 사원이 29도로 읽습니다.
  3. 짱구 사원이 27도로 변경합니다.
  4. 둘리 사원이 25도로 변경합니다.

공유 자원인 에어컨 온도를 다룰때, 조회와 수정을 조율하지 않으면 위와 같이 데이터 조회 시점이 엇갈릴 수 있습니다.

짱구는 29도를 읽고 27도로 바꾸는 동안 둘리가 29도로 읽고 25도로 바꾸면, 최종 온도가 의도와 달리 25도가 될 수 있습니다.

프로세스 동기화는 작업의 순서를 조정하여 이런 문제를 방지하고, 결과를 예측가능한 상태만드는 것입니다.

댓글남기기