Parallelism and Concurrency 1

Posted 2008. 3. 26. 02:36
여러분은 Paralleism과 Concurrency를 구분해서 쓰시나요? 저는 그동안 Parallel Programming과 Concurrent Programming을 구분하지 않고 그냥 병렬 프로그래밍이라고 번역해왔는데 Parallelism과 Concurrency의 의미를 구분해서 쓰는 경우도 있더군요. 헤스켈 컴파일러인 GHC 매뉴얼 Cocurrent and Parall Haskell에 보면 두 용어를 다음과 같이 정의해 놨습니다.


Paralleism

헤스켈 프로그램을 성능 향상을 목적으로 여러 프로세서에 돌리는 것을 의미한다. 이 과정은 의미 변화 없이 눈에 보지이 않게(자동으로) 이루어지는 것이 이상적이다.


Concurrency

프로그램을 I/O를 수행하는 여러 개의 쓰레드를 구현하는 것을 의미한다. Concurrent 헤스켈 또한 병렬 머신에서 실행될 수 있으나, Concurrency의 주 목적은 성능 향상이 아니라 이 방법이 프로그램을 작성하고 가장 쉽고 직접적인 방법이기 때문이다. 쓰레드가 I/O를 수행하기 때문에 프로그램의 의미는 비결정적(non-deterministic)이다.

저는 여전히 두 용어를 혼용해서 쓰는 편이고 웹에 있는 상당수의 글들도 마찬가지인 것 같은데 정확한 가이드라인이 있는 것인지 궁금하군요. 더불어 Concurrency는 뭐라고 번역하면 좋을까요? 동시성은 영 어색한 단어 같고, 병렬로 하자니 Parallelism과 구분이 안 되는 것 같고 고민이네요.