[CS:APP] 동시성과 병렬성

Laska·2025년 3월 31일
post-thumbnail

동시성과 병렬성


직렬과 병렬의 차이는 알고있어 ?

직렬과 병렬의 구조를 이해하면 동시성과 병렬성에 대해 이해가 쉬워진다.

직렬이란 ?

커다란 망치로 혼자 벽을 부순다면 그게 직렬이다.

병렬이란 ?

작은 망치로 다같이 벽을 부순다면 그건 병렬이다.


사전적 용어는 어려워서 나는 이런식으로 이해했다.

다같이 하면 병렬, 혼자하면 직렬이다.



그럼 동시성과 병렬성은 뭔데 ?


컴퓨터 시스템에서 일어나는 동시성은 쓰레드 수준 동시성 이 있다.



쓰레드 수준 동시성이란?

쓰레드 수준 동시성

프로그램이 여러 개의 쓰레드(Threads)를 사용하여 동시에 여러 작업을 수행하는 능력을 의미함. 이 개념은 운영체제나 프로그램이 CPU의 자원을 효과적으로 활용하여 동시 처리를 가능하게 하는 중요한 방법 중 하나이다.

쓰레드가 프로세스 하나만 처리를 한다면, 우리는 다양한 프로그램을 키고, 컴퓨터를 사용하지 못한다.(단일 프로세스 시스템 기준)

이걸 가능하게 하는게 쓰레드 수준 동시성이다.



위 그림을 보면 곡예사가 저글링을 하고있다.

공이 하나의 작업 단위(Task)라고 생각하고, 저글링하는 사람이 쓰레드라면, 하나의 쓰레드가 빠르게 여러 작업을 번갈아 처리하는 모습이다.

저런식으로 매우 빠르게 처리를 하여, 우리에겐 동시적으로 처리되는거 같이 느껴지게 된다. 그래서 사용자가 다수의 테스크에 동시에 연관될 수 있게 해준다.



그럼 병렬성은 ?


병렬은 진짜 동시에 하는거다.

앞서 말했듯, 동시성은 빠르게 번갈아가면서 처리하는 거라면, 병렬성은 진짜 동시에 처리하는거다.

위에서 병렬은 여러 명이 각자 망치를 들고 벽을 부순다고 했다. 그러니까 일 자체를 나눠서 동시에 수행하는 것이 병렬이다.



+) 병렬 처리는 실제로 여러 개의 CPU 코어가 동시에 일을 처리함으로써 가능한 구조이다. 즉, 다중 코어 환경에서만 병렬성의 효과가 진짜로 드러난다.




1. 인스트럭션 수준 병렬성

CPU 내부에서 하나의 쓰레드(또는 프로그램) 가 실행될 때, 그 안의 여러 명령어(인스트럭션) 들을 병렬적으로 처리하는개념


CPU는 단순히 한 줄씩 순서대로 명령을 처리하지 않는다. 가능하면 앞뒤 명령 간의 의존성이 없는 부분을 찾아서 동시에 실행해버린다.

예를 들면 요리할 때,

1. 물을 끓이면서
2. 동시에 야채를 썰고
3. 동시에 고기를 손질할 수 있다면

그게 인스트럭션 수준 병렬성이다.




2. 데이터 수준 병렬성 (Data-Level Parallelism, DLP)

데이터 수준 병렬성
같은 연산을 여러 데이터에 대해 동시에 수행하는 병렬성.

이 방식은 SIMD (Single Instruction, Multiple Data) 구조에서 자주 사용된다. 하나의 명령어로 여러 데이터를 동시에 처리하는 방식이다.

백터 연산과 행렬 연산에도 자주 사용된다.(GPU)

예를 들면,

이미지 필터를 적용할 때 모든 픽셀에 같은 수식을 적용한다. 그걸 픽셀 하나씩 순서대로 하지 않고, 한꺼번에 여러 픽셀을 동시에 처리하게된다.

그러니까 공사장에 인부가 많고 동시에 처리하는것이다.




동시성 VS 병렬성

구분동시성 (Concurrency)병렬성 (Parallelism)
개념여러 작업을 빠르게 번갈아 실행여러 작업을 진짜 동시에 실행
전제논리적인 동시 실행물리적인 동시 실행 (멀티코어 필요)
예시저글링처럼 한 사람이 여러 공을 번갈아 던짐여러 사람이 각자 공을 던짐
적용 환경싱글코어, 멀티코어 모두 가능주로 멀티코어 환경에서 동작
목표응답성 향상, 자원 효율성처리 속도 향상, 실행 시간 단축

동시성은 "하나가 여러 역할을 빠르게 왔다갔다"
병렬성은 "여러 명이 각자 일 맡아서 동시에 진행"

profile
똑똑해지고 싶어요

0개의 댓글