[CS] 동시성 (Concurrency) vs 병렬성 (Parallelism)

Jae_0·2023년 3월 28일
0
post-thumbnail

동시성 (Concurrency) vs 병렬성 (Parallelism)


운영체제 수업을 들으며 공부한 동시성, 병렬성 간의 차이에 대한 기록이다.

1. 동시성 (Concurrency)

동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다.
이는 동시에 실행되는 것이 아닌, CPU가 작업당 시간 분할하여
적절한 Context Switching을 통해 동시에 실행 되는 것처럼 보이게 한다.
이때문에, 동시성은 구현하고 디버그하기가 상당히 복잡하다

1.1 동시성의 작동원리

먼저, 동시성의 주요 목표는 유휴 시간을 최소화하여 CPU를 최대화하는 것이다.
현재 스레드나 프로세스가 I/O 작업, DB트랜잭션을 기다리거나 외부 프로그램을
시작하는 동안 다른 프로세스나 스레드가 CPU 할당을 받는다.
이때, 커널 쪽에서 OS는 active task에 인터럽트를 보내 중지하게 된다.

유휴시간 (idle time)은 CPU의 처리 시간과 I/O 장치에서의 처리 시간 차이로
CPU를 사용할 수 있는 상태임에도 CPU가 작업을 하지 않고 쉬고 있는 시간을 의미한다.


둘 이상의 task가 싱글 코어 또는 멀티 코어 CPU의 동일한 코어에서 실행 중인 경우
동일한 리소스에 동시에 엑세스할 수 있다. data read 작업이 병럴로 수행되고 안전하더라도
write 권한으로 접근할 경우 꼭 데이터 무결성을 유지해야 한다.

프로세스 스케쥴링에 대해 잘 알아야 할 것 같다.

2. 병렬성 (Parallelism)

병렬성은 동일한 시간에 프로그램의 독립적인 작업을 실행할 수 있음을 의미한다.
동시성과의 차이로는, 여러 작업이 다른 코어, 다른 프로세서 또는 분산 시스템이 가능한
별도의 컴퓨터 등에서 동시에 실행할 수 있다. 실제 응용프로그램의 컴퓨팅 속도에 대한
요구가 증가함에 따라 병렬성은 보다 보편화되고 저렴해졌다.

2.1 병렬성의 작동원리

병렬성에 대한 예시로 분산 컴퓨팅 시스템이 있다. 이는 여러 컴퓨터 시스템으로 구성되지만
실행은 단일 시스템으로 실행된다. 각 컴퓨터에 있는 시스템들은 광역 네트워크로 연결 될 수 있다.
각 컴퓨터에 존재하는 시스템들은 네트워크로 연결될 수 있다. (그림 참고) 해당 예제 외로도 하나의 컴퓨터에서 여러 코어를 사용하여 병렬 처리를 활용할 수도 있다.

따라서 병렬 처리는 성능 향상을 위한 필수 요소이다. 이러한 분산 시스템 외에도
하나의 컴퓨터에서 여러 코어를 사용하여 병렬 처리를 활용할 수도 있다.

3. 동시성 (Concurrency) vs 병렬성 (Parallelism)

두 개의 코어와 두 개의 작업(task)가 있다고 가정할 때, 동시성의 경우 한 개의 코어가
시간이 지남에 따라 task1, task2를 번갈아가며 실행한다. 병렬성은 task1, task2 간에
전환이 이루어지지 않고, 두 개의 코어 각각에서 task를 병렬로 실행한다.
아래는 위 내용에 대한 예제 그림이다.

3.1 동시성과 병렬성의 잠재적 위협

가장 처음에 언급했듯이 동시성과 병렬성은 복잡한 개념이며 고급 개발 기술이 필요하다.
그렇지 않으면 시스템의 안전성을 위태롭게 하는 몇 가지 잠재적 위협이 있을 수 있다
예를 들어, 동시성 환경을 신중하게 설계하지 않는다면
Deadlock, Race Condition, Starvation 등의 문제가 발생 할 수 있다.
마찬가지로 병렬성은 어디서 멈추고, 무엇을 공유해야 할지 명확한 인식이 필요하다.
그렇지 않으면 메모리 손상, 누수, 오류가 발생할 수 있다.

  • Deadlock는 둘 이상의 프로세스나 스레드가 한정된 자원을 여러 곳에서 사용하려고 할 때,
    서로 자원을 얻지 못하고 무한히 다음 자원을 기다리게 되는 상태를 의미한다.
  • Race Condition은 두 개 이상의 프로세스나 스레드가 하나의 자원에 접근하여 서로의 결과에
    영향을 주는 현상을 의미한다.
  • Starvation은 특정 프로세스의 우선 순위가 낮아, 원하는 자원을 계속 할당받지 못하는
    상태를 의미한다. 기아상태라고도 불린다.

참고
연로그
스택오버플로우
으뜸별
baeldung

profile
기록하며 꾸준히 성장하는 코딩 공부

0개의 댓글