이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
멀티 프로세스와 멀티 스레드를 공부하다보면 동시성(Concurrency)와 병렬성(Parallelism)라는 개념을 많이 접하는데, 이 둘의 차이점에 대해 정확히 인지하지 못하고 넘어가는 경우가 있었다.
오늘은 이 두 개념에 대해 자세히 알아보자.
✅ 동시성 (Concurrency)
동시성(Concurrency)란 여러 개의 작업이 동시에 작동하는 것처럼 보이지만, 하나의 코어가 여러 작업을 빠르게 번갈아가면서 처리하는 것을 말한다.
우리가 사용하는 CPU는 동시성(Concurrency)라는 특성을 가지고 있다.
동시성이란 둘 이상의 작업이 동시에 실행되는 것을 이야기한다.
동시라는 단어로 인해 의미가 헷갈릴 수 있다. 하지만 여기서 이야기하는 동시성은 정말로 동시에 작업을 처리하는 것이 아니다.
PA PB PC 총 세 개의 프로세스가 있고, 이를 처리할 수 있는 코어는 단 하나라고 가정해보자.
코어는 여러 개의 프로세스들을 번갈아가며 조금씩 처리하는 과정을 반복하는데, 이 과정이 매우 빠르게 이루어지기 때문에
겉으로 보기에는 마치 동시에 작업을 처리하는 것처럼 보이는 것을 이야기한다.
이를 통해 사용자에게 더 빠른 반응성을 제공할 수 있다.
멀티 프로그래밍(Multi-programming) 환경에서는 동시성을 구현하기 위해, CPU가 현재 실행되고 있는 Task(Process, Thread)에서 다음에 진행할 Task로 교체하는 작업이 일어난다.
위 과정에서 PA에서 PB로 혹은 PC에서 PA로 작업을 전환하는 것을 Context switching이라고 한다.
동시성의 핵심 목표는 유휴 시간(idle time)을 최소화하는 것이다.
유휴 시간(idle time)이란, 코어에 아무런 작업이 할당되지 않아 사용 가능한 상태임에도 불구하고, 사용되지 않고 놀고 있는 시간을 말한다.
유휴 시간이 줄어들수록 CPU가 단위 시간 당 처리할 수 있는 양이 늘어날 것이고, 성능도 더 증가할 것이다.
✅ 병렬성(Parallelism)
반면, 병렬성의 경우 실제로 여러 작성이 동시에 처리되는 것을 말한다.
멀티 코어(Multi-core)에서 멀티 스레드(Multi-thread)를 동작시키는 방식을 이야기한다.
동일한 시간에 독립적인 작업을 실행할 수 있으며, 동시성과는 다르게 여러 작업을 다른 코어, 프로세스 등에서 동시에 실행할 수 있다.
✅ 참고 자료 & 링크
- Operating System Concepts Essential 2판
- https://literate-t.tistory.com/201
- https://yeonyeon.tistory.com/270
- https://thebook.io/080367/0023/https://mentha2.tistory.com/245