동시성과 병렬성의 차이 알아보기(Difference Between Concurrency and Parallelism)

안녕하세요.

 

회사에서 단순 API 개발 업무를 하다가 동시성 이슈를 맞딱뜨리게 되었고, 동시성 처리에 대해 알아보던중, 병럴(parallel)이라는 키워드를 종종 보곤하여(ex, parallelstream) 두가지 개념에 대해서 정리하고자 합니다.

 

우선 두가지를 직관적인 표로 비교해서 보겠습니다.

 

동시성(Concurrency) 병렬성(Parallelism)
여러 작업이 동시에 실행되고 있는 것처럼 구현되는 것 여러 작업이 실제로 동시에 실행되고 있는 것
싱글 코어 환경에서 단일 프로세스 내에 멀티 스레드를 동작하여 구현 멀티 코어 환경에서 멀티 프로세스(단일 스레드) 혹은 멀티 스레드를 활용하여 처리.
빠른 시간에 하나씩 많은 것을 처리 한번에 많은 것을 처리
논리적인 부분 물리적인 부분
예시)
커피 추출구가 하나인 커피머신이 아메리카노, 라떼, 마끼야또를 재료를 바꿔가면서 동시에 만들어지도록 구현.
예시)
커피 추출구가 여러개인 커피머신이 동시에 각각의 재료를 통해 아메리카노, 라떼, 마끼야또를 만듬.

그런데 위의 예를 보면,

 

대부분의 동시성은 구현 이라는 키워드로 작성을 하고 병렬성은 마치 정해진 듯한 어조로 표를 쓴 것 같습니다. 맞습니다. 실제로 병렬이라는 것은 어떤 것이 동시에 실행되는 것처럼 만드는게 아니라 실제로 동시에 실행되고 있어야만 합니다.

 

따라서 그렇게 보이도록 만드는 것과 실제 그렇게 보이는 것은 같은 개념이라고 볼 수 있습니다. 즉, 병렬성은 동시성과 같은 개념입니다. 하지만 동시성은 병렬성과는 다른 개념입니다. 중학교 수학시절 명제와 집합이라는 것을 배우셨을텐데요. 

 

병렬성은 동시성의 하위집합이다. 따라서 병렬성은 동시성을 구현했다고 볼 수 있다. 하지만 동시성은 병렬성과 같지 않다.

위와 같이 판단할 수 있게 됩니다.

여기서 중요한 점은 병렬성은 동시성의 하위집합으로 분류할 수 있음을 인지하는 것입니다.

 


이제는 조금 개념적인 부분에서 물러나서 물리적인 부분으로 접근해보겠습니다.

 

동시처리와 병렬처리의 그림

실제 컴퓨터의 중앙처리장치(CPU)는 하나의 작업밖에 하지 못합니다. 따라서 개발자가 작성한 프로그램을 실행하여 프로세스화 할때 cpu에 로드되는 데이터(자원들)는 cpu가 프로세스를 갈아치우는 context switch 작업을 할때마다 변경되지만 우리가 실제 컴퓨터에서 화면을 볼때는 이 찰나가 느껴지지 않을 만큼 빠르게 동작합니다.

 

하지만 코어의 갯수가 한개가 아니라면 하나의 작업이 아닌 코어의 갯수만큼 프로세스를 실행할 수 있게 됩니다. 따라서 T1과 T2를 번갈아가면서 실행하는 것이 아닌 같은 흐름을 가지는 스레드(하나의 단일 프로세스 내 단일 스레드)에 태울 수 있게 됩니다.

 


 

위에 부분이 조금 와닿지 않는다면 좀 더 쉽게 전달할 수 있는 그림이 있어서 그림을 보면서 이해하면 좋을 것 같습니다.

 

커피머신이 한대가 있고 줄이 2개의 줄이 있는 카페와 커피머신 두대와 2개의 줄이 있는 카페에서 어떤 것이 concurrent , parallel 한 상황인지를 보여줍니다.

위에서 분명히 말씀드렸지만 두 상황 모두 concurrent 하다고 할 수 있는 상황입니다. 병렬성은 동시성에 속하기 때문이죠. 하지만 병렬성과 동시성을 이분법적으로 떼어서 생각한다면 위에처럼 이해하고 추후에 이해가 안되는 어려운 내용은 살을 붙여가면서 이해해 나가시면 될 것 같습니다.

 


 

참조 레퍼런스

https://seamless.tistory.com/42

 

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

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과

seamless.tistory.com

https://www.codeproject.com/Articles/1267757/Concurrency-vs-Parallelism

 

Concurrency vs Parallelism

This article will explain the difference between concurrency and parallelism. Concurrency vs parallelism has been a debated topic for a long time.

www.codeproject.com

 

댓글

Designed by JB FACTORY