동시성과 병렬성은 헷갈릴 수 있는 주제이다. 사전상의 의미도 같을 뿐더러 컴퓨터 분야에서 말하는 동시성과 병렬성의 차이점을 확실하게 이해하기도 난해하다.
아래에서 자세하게 살펴보자
동시성
이란 싱글 코어
에서 멀티 쓰레드
를 동작 시키는 방식이다.
(코어의 종류에는 싱글 코어
와 멀티 코어
가 있다.)
싱글 코어에서 멀티쓰레드를 동작 시키는 방식은 동시성,
멀티 코어에서 멀티쓰레드를 동작 시키는 방식은 병렬성이다.
따라서 이렇게 이해하면 좀 와닿을 수 있다.
동시성
과 병렬성
은 사전에서는 같은 의미로 사용하고 있지만, 컴퓨터 분야에서는 다르게 정의하고 있기 때문에 이 둘을 서로 비교해가며 알아보자
동시성 | 병렬성 |
---|---|
동시에 실행되는 것 같아 보이는 것 | 실제로 동시에 여러 작업이 처리되는 것 |
싱글 코어에서 멀티 쓰레드를 동작 시키는 방식 | 멀티 코어에서 멀티 쓰레드를 동작 시키는 방식 |
논리적인 개념 | 물리적인 개념 |
표로만 봐도 뭔가 다르다는게 느껴지긴 한다.
하지만 뭔가 잘 이해가 되지 않을 수도 있다. 동시에 실행되는 것도 아니고, 실행 되는 것 같아 보이는 것은 무슨 말인가;
아래의 그림을 통해 알아보자
Concurrent
는 동시성
이다.
그림과 같이 2개의 작업이 번갈아 가며 진행되면서 동시에 진행되는 것 처럼 보입니다. 그래서 동시에 실행되는 것 같아 보이는 것이라고 표현한다.
반면 Parrallel(병렬성)
은 실제로 작업을 동시에 진행하는 것을 볼 수 있다.
실제로 4개의 코어를 가진 쿼드 코어
의 속도는 이론적으로 실행 속도를 4배
까지 향상시킬 수 있다.(물론 오버헤드로 인해 실제 4배가 되기는 어렵다.)
이렇게 동시성과 병렬성을 간단하게 알아보았다.
멀티 코어
+ 멀티 스레드
작업이라 항상 더 좋을 것 같지만, 동시성
으로 접근하는게 좋은 경우도 있음 ex) 네트워크 통신
, 파일 저장 및 로드
등의 I/O
작업은 CPU
가 거의 일을 하지 않고 요청 후 응답이 올 때까지 대기상태
에 있게됨. 이때 한 개의 CPU
가 I/O
요청 후 기다리는 동안 다른 작업을 처리하도록 하면 효율적임동시성
과 병렬성
을 혼용해서 처리하는 경우도 있음동시성
은 작업이 바뀔 때 문맥 교환
이 발생하고, 동시 작업이 너무 많다면 문맥 교환
의 오버헤드
로 인해 싱글 코어
에서 싱글 스레드
로 작업하는 것이 더 빠를 수 있음Parallel
하게 작성할 수 없고 반드시 Sequential
하게 동작해야 하는 부분들이 존재함