작성일
20231129
한 마디로 여러 개의 Task가 있을 때, 동시에 실행되는 것
처럼 보이는 성질을 말한다. 동시성이 나타나는 경우를 크게 싱글 코어와 멀티 코어로 나누어 살펴보려고 한다.
싱글 코어에서 멀티 스레드를 동작시키는 경우, 멀티 태스킹을 하기 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질을 동시성이라고 부른다. 이 경우에는 실제로 물리적 시간으로 동시는 아니지만 Context Switching 즉, 빠른 속도로 다른 작업으로 넘어가기 때문에 동시에 작업이 이루어지는 것처럼 보인다.
반면, 멀티 코어에서 멀티 스레드를 이용하여 동시성을 만족시키는 경우에는 그렇게 보이는 것이 아니라 실제로 동시에 실행된다는 차이가 있다.
동시성 개념에서 오해하지 말아야 할 지점은 모든 멀티 스레드가 동시성을 만족하는 것은 아니라는 것이다. 일례로 코틀린의 경우 싱글 스레드에서 코루틴을 이용하여 동시성을 만족하기도 한다.
Logical Level에 속한다.
Single Core
물리적으로 병렬이 아닌 순차적으로 동작할 수 있다.
실제로는 Time-sharing으로 CPU를 나눠 사용함으로써 사용자가 Concurrency를 느낄 수 있도록 한다.
Multi Core
물리적으로 병렬로 동작할 수 있다.
Case
Mutex, Deadlock
다른 작업으로 넘어가야 하기 때문에 context switching이 필요하다. context switching이란 현재 진행하고 있는 작업의 상태를 적용하고 다음 진행할 작업의 상태값을 읽어 적용하는 과정!
이 context swiching에는 다양한 알고리즘이 있는데 매우 빠르기 때문에 사람이 느낄 때는 여러가지 작업을 동시에 수행하는 것 같은 느낌이 듦.
하지만 “동시성”은 여러가지 일을 “동시에”하는 것이 아니라 한가지 일을 조금씩 나눠서 하는 것.
1코어 N쓰레드
병렬성 개념의 핵심은 실제로 작업이 동시에 수행된다는 점
이다. 이러한 성질이 드러나는 예를 들자면 멀티 코어에서 멀티 스레드를 동작시켜, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 경우를 들 수 있다. 또다른 예로는 네트워크 상의 여러 컴퓨터에게 분산작업을 요청하는 분산 컴퓨팅이 있다.
Physical(Machine) Level에 속한다.
오직 Multi Core에서만 가능하다.
Case
OpenMP, MPI, CUDA
[BOOK]
[BLOG]
https://nesoy.github.io/articles/2018-09/OS-Concurrency-Parallelism
[Study] 동시성(Concurrency) 과 병렬성 (Parallelism) 올바른 개념 잡기
https://vagabond95.me/posts/concurrency_vs_parallelism/