Digital Recipe

동시성(Concurrency)과 병렬성(Parallelism) 본문

컴퓨터 공학/컴퓨터 공학의 이해

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

노리터 2017. 3. 12. 20:49

컴퓨팅에서 데이터 처리에 있어서 동시성(Concurrency)와 병렬성(Parallelism)은 많이 사용되는 개념이지만 동일한 개념으로 혼용되어 사용되기 쉽다. 따라서 이 글을 통해서 두 개념 간의 차이를 구별하고자 한다.


동시성(Concurrency)

서로 독립적인 작업을 작은 단위의 연산으로 나누고 시간 분할 형태로 연산하여 논리적으로 동시에 실행되는 것처럼 보여주는 것을 말한다. 논리적인 개념이기 때문에 단일 쓰레드에서도 사용이 가능한 개념이다. 예를 들어 초기 멀티 태스킹은 동시성 개념을 통해 여러 프로세스가 동시에 수행되는 것과 같은 결과물을 만들 수 있었다.


병렬성(Parallelism)

병렬성은 동시성과 다르게, 물리적으로 실제로 동시에 여러 작업을 연산하는 것을 말한다. 때문에 단일 쓰레드에서는 사용이 불가능하고 다중 쓰레드가 필요하다. 또한 병렬성은 사용방법에 따라 데이터 병렬성작업 병렬성으로 나눌 수 있다. 데이터 병렬성은 하나의 단일 작업을 여러개로 쪼개서 연산하는 것을 말하며, 작업 병렬성은 독립적인 작업을 각 쓰레드에서 담당하여 연산하는 것을 말한다.

즉, 데이터 병렬성을 사용하면 하나의 작업에 대한 빠른 처리 결과를 받을 수 있지만 작업 병렬성이라면 단일 쓰레드에 단일 작업을 처리하는 것과 동일한 결과를 얻게 될 것이다.

병렬성에 대한 추가적인 고찰이다. 위 예는 연산처리가 가능한 CPU를 기반으로 설명되었다. 병렬성을 다시 설명해 보면 작업을 완료하기 위해 사용 가능한 모든 리소스를 최대한 사용하는 것이다. 라고 이야기 할 수 있다. 여기서 리소스는 CPU, RAM, Data Bus(데이터 전달 회로)등이 될 수 있다. 예를 들어 작업A가 순차적으로 CPU를 2초->Data Bus를 2초->Data 처리하는 2초 사용한다고 할 때 마지막 단계인 데이터 처리하는 동안 Data Bus는 아무 일도 안하게 된다. 이런 유휴(idle time)을 다른 작업B가 사용한다고 하면 이 역시 리소스를 최대한 사용하는 병렬성이라고 할 수 있다.




Reference

[01] https://talks.golang.org/2012/waza.slide

[02] http://atin.tistory.com/567


Written By Hoseok Seo

2017. 03. 12




Comments