동시성(Concurrency)과 병렬성(Parallelism)
˙동시성(Concurrency)과 병렬성(Parallelism)
동시성(Concurrency)은 동시에 실행되는 것처럼 보이는 반면에, 병렬성(Parallelism)은 실제로 작업이 동시에 처리되는 것이다. 따라서, 동시성은 싱글코어의 환경에서도 운영이 가능하지만, 병렬성은 반드시 멀티코어의 환경이어야 운영이 가능하다.
˙동시성(Concurrency)
논리적 용어로 동시에 실행되는 것처럼 보이는 행위로, 단일 코어 이상인 환경에서 멀티 스레드*를 동작시키기 위한 방식이다. 멀티 태스킹을 위하여 여러 개의 스레드가 번갈아가면서 실행되는 형태로, 사용자가 보기에는 스레드들이 병렬적으로 실행되는 것처럼 보인다. 실제로는 번갈아가며 실행되고 있는 상태로, 작업 단위별로 조금씩 처리해 나아가는 방식이다.
˙병렬성(Parallelism)
물리적 용어로 실질적으로 동시에 실행되는 행위로, 멀티 코어 이상인 환경에서 멀티 스레드를 동작시키는 방식이다. 한 개 이상의 스레드를 포함하는 코어들이 동시에 실행되는 상태로, 데이터 병렬성과 작업 병렬성으로 구분한다.
˙데이터 병렬성(Data Parallelism)과 작업 병렬성(Task Parallelism)
데이터 병렬성(Data Parallelism)은 동일한 작업을 병렬적으로 처리하는 반면, 작업 병렬성(Task Parallelism)은 서로 다른 작업을 병렬적으로 처리한다. 데이터 병렬성은 단위별로 쪼갠 후 쪼개진 데이터를 병렬적으로 처리함으로써, 작업을 빠르게 수행한다. 즉, 쪼개진 데이터에 대하여 멀티 코어의 수만큼 쪼개어 각각의 분리된 스레드에서 처리한다.
* 스레드 : 어떠한 프로그램 또는, 프로세스 내에서 실행되는 흐름의 단위