동시성(concurrency) & 병렬성(parallelism)

smlee·2023년 9월 19일
0

개발 용어

목록 보기
2/2

어느 정도 Akka Official Documentation을 공부 하고 Akka 관련 전자책 구매 후 공부 중, 해당 책에서 2개의 챕터에 걸쳐 동시성과 병렬성을 다루었다. 물론, Akka 내용과 연관지어 다룬 내용이지만 꽤나 중요하게 다루므로 정리해놓으려고 한다.



위의 표는 기술 면접을 준비하며 수도 없이 본 표이다. 요점만 정리하면 밑과 같다.

동시성과 병렬성
동시성싱글 코어 멀티 스레드 환경에서 사용하므로 한 번에 하나의 일만 처리하지만, 빠르게 다른 task로 바꾸어 동시에 실행하는 것처럼 보이는 것인다.
반면, 병렬성멀티 코어 멀티 프로세스(스레드) 환경에서 실제로 독립적으로 동시에 실행되는 것을 뜻한다. (Akka Concurrency라는 책에서는 병렬성을 OS 내의 프로세스 간의 통신으로 비유한다.)


물론 위의 이미지들을 통해 어떤 식으로 동작하는지 대강 알 수 있다.
하지만, 조금 더 자세하게 정리 해보려고 한다.

동시성 (Concurrency)

동시성여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다. 즉, 동시에 실행되는 것이 아닌, 적절한 context switching을 통하여 동시에 실행되는 것처럼 보인다. CPU가 적절히 작업 시간을 분할해야하므로 디버깅하기도 매우 어려운 작업이다.

동시성의 핵심 목표는 유휴 시간을 최소화하는 것이다. 현재 프로세스/스레드가 IO 작업, DB 트랜잭션 등 외부 프로그램을 실행을 기다리는 동안 다른 프로세스/스레드가 CPU 할당을 받는다.

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


해당 동작들을 위와 같이 표현할 수 있다.

병렬성 (Parallelism)

병렬성동일한 시간에 독립적인 작업을 실행할 수 있는 것으로, 여러 작업을 다른 코어 및 다른 프로세스, 별도의 컴퓨터 등에서 동시에 실행할 수 있다. 따라서 병렬 처리가 성능 향상에 필수적이다.


분산 컴퓨팅이 병렬성의 대표적인 예이다. 독립된 PC들로 시스템을 이루고 있는데, 이렇게 독립된 컴퓨터들은 각각의 일을 처리하므로 병렬성의 예시라고 볼 수 있다.

Concurrent vs Parallelism


위와 같이 concurrent는 context switching이 끊임 없이 일어나고 있다. 따라서 race condition, dead lock, starvation 등의 문제를 고려하여 코드를 작성해야 한다.

경쟁 상태(race condition)
한 자원에 대해 프로세스나 스레드의 접근 순서에 따라 결과 값이 달라지는 현상

교착 상태(dead lock)
2개 이상의 프로세스가 스레드가 서로 무한히 대기하며 자원을 기다리는 상황

기아 현상(starvation)
프로세스의 우선 순위가 낮아 원하는 자원을 할당 받지 못하고 기다리기만 하는 현상

반면, parallel은 어떤 task가 어떤 자원을 공유하는지 고려해야 하므로 메모리 손상, 누수 등의 문제가 발생할 수 있다.

0개의 댓글