헷갈리기 쉬운 개념인 concurrency(동시성) parallelism(병렬성)의 개념 차이를 짚고 가자.

 

둘 다 여러개의 thread로 하나의 task를 처리하는 상황을 뜻하는 개념이라 언뜻 보면 같은 말처럼 보인다. 내부적으로 여러 개의 thread가 어떻게 각자 맡은 역할을 수행하는지를 메커니즘을 살펴보면 차이가 있다.

 

concurrency는 여러개의 thread가 번갈아가며 실행되는 것을 말한다. 하나의 thread가 돌아가는 동안 다른 thread는 잠시 대기 상태가 되어 자신에게 차례가 돌아오기를 기다려야 한다. 동시에 진행되는 것처럼 보이나, 특정한 시간대에 실행되는 thread는 하나이고 시분할 방식을 적용해 그렇게 느끼게 하는 것이다.

지하철을 타려는 대기 줄은 여러줄인데, 개찰구(Thread)는 하나 뿐이다. 개찰구는 1번 줄의 사람들을 조금 통과시키고, 다시 2번 줄의 사람들을 조금 통과시키고.. 이런식으로 번갈아가며 사람들을 통과시킨다.

 

parallelism은 말 그대로 한번에 여러가지 작업을 처리하는 것을 의미한다. 컴퓨터에 장착된 멀티코어 CPU/GPU를 통해 물리적으로 여러개의 작업을 동시에 처리할 수 있다.

지하철을 타려는 대기 줄(Queue)는 여러줄일때, 여러개의 개찰구를 준비해 하나의 줄을 하나의 개찰구가 전담해서 맡아 처리한다. 하나의 개찰구로 처리할 때보다 사람들을 더 빠르게 통과시킬수 있게된다.

 

요약

  • 두개 이상의 쓰레드가 동시에 진행되는 것은 Concurrency
    • 동시에 여러 작업이 처리되는 것처럼 보임
    • 실행 순서가 존재함
  • 두개 이상의 쓰레드가 동시에 실행되는 것은 Parallelism
    • 실제로 동시에 여러 작업이 처리됨
    • 실행 순서가 존재하지 않음