동시성(Concurrency)과 병렬성(Parallelism)은 다르다

동시성

동시성은 적어도 두 개의 스레드가 진행 중일 때 존재하는 조건이며, 가상 병렬 처리의 한 형태로 시간 분할(time-slicing)을 포함한다. 우리가 흔히 ‘동시’라고 이야기 하지만 컴퓨터(코어)는 한번에 하나의 명령어만 처리할 수 있다. 즉, 두개 이상의 알고리즘이 하나의 코어내에서 스레드간에 빠르게 교차되면서 실행되기 때문에 ‘동시’라고 느끼는 것이다.

위의 그림은 싱글 코어내에서 다중스레드들이 실행되는 동시성을 나타내고 있다. 참고로 Thread A와 Thread B가 교차되며 실행되는 부분을 Context Switching(문맥교환)이라고 한다.

병렬성

병렬성을 이야기하려면 적어도 2개 이상의 코어가 있어야 한다. 병렬성도 동시성을 의미하지만 동시성과의 차이는 각 코어내의 스레드가 실제로 동시에 명령어를 실행할 수 있음을 말한다. 그러므로 두개의 알고리즘이 정확히 같은 시점에 실행될 때 이를 병렬적이라고 말할 수 있다.

Conclusion

사소하지만 동시성과 병렬성을 차이를 구분할 수 있어야 CPU 바운딩 또는 IO 바운딩 상황에서 소프트웨어를 어떻게 구현해야 성능을 끌어 올릴 수 있는지에 대해 판단 할 수 있을 것이다.

 

Buy me a coffeeBuy me a coffee
카테고리: etc

0개의 댓글

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.