[운영체제] 멀티스레드의 동시성(Concurrency)과 병렬성(Parallelism)

하나의 프로세스에서 다수의 스레드들이 실행되는 것을 멀티스레딩이라고 한다. 

하나의 프로세스 안에서 스레드끼리 code, data, heap 영역을 공유하고 각각의 stack, PC, 레지스터를 가지기 때문에 자원을 공유하기 좋아 멀티프로세스보다 이점이 있다.

동시성(Concurrency)

싱글 코어에, 멀티코어에서 멀티 스레딩을 구현하는 방식이다.

이름이 동시성이지만 진짜로 동시에 실행된다는 의미는 아니고 여러 작업이 동시에 실행되는 것처럼 보이는 것을 말한다.

한 타임에 하나의 스레드만 실행되고  짧은 시간 동안 스레드를 적절히 바꿔가면서 실행되는 것이다.

concurrent

위 사진을 보면 4개의 thread가 하나의 core를 나눠서 쓰고 있다.

 

병렬성(Parallelism)

멀티 코어에서 멀티 스레딩을 구현하는 방식을 병렬성이라고 하고, 동시성이 동시에 실행되는 것처럼 "보이는" 거였다면, 병렬성은 진짜로 여러 thread들이 동시에 실행되는 것이다.

Parallelism

병렬성에는 두 가지 종류가 있다.

Data parallelism

전체 데이터를 나누고, 나눈 데이터들을 각 코어에 배분해 같은 연산을 수행하는 방식이다.

Task parallelism

서로 다른 작업을 병렬화하는 것을 말한다. 데이터뿐만 아니라 스레드들도 코어에 배분한다. 이때는 같은 연산을 수행할 수도 있고 서로 다른 연산을 수행할 수도 있다.

 

추가로, Sequential한 방식이라면, thread 1이 다 끝나야 thread 2가 실행된다.

Sequential

Concurrent & Parallel

동시성과 병렬성을 동시에 구현하면 다음과 같다.

멀티 코어에서 동시에 여러 개의 작업을 할 수 있다. 

'study > CS⚡' 카테고리의 다른 글

[운영체제(OS)] 시스템 콜(System Call)이란?  (0) 2023.09.24