CONCURRENCY
동시성: 여러 일을 겹쳐 진행
여러 작업을 모두 진행 중으로 관리하는 구조다. 한 순간에 하나만 실행해도 동시성을 만들 수 있다.
- 싱글 코어 가능 — 작업을 짧게 번갈아 실행할 수 있다.
- 기다림 활용 — 네트워크 응답을 기다리는 동안 다른 일을 한다.
- 핵심 질문 — “현재 기다리는 일을 두고 다른 일을 진행할 수 있는가?”
02강 · 여러 일을 처리하는 방법
여러 일을 번갈아 진행하는 것과 여러 실행 자원이 실제로 동시에 일하는 것은 어떻게 다를까?
START HERE
선택한 항목을 오늘 설명의 출발점으로 삼는다. 여러 개를 골라도 괜찮다.
WATCH THE DIFFERENCE
“한 순간에 실제로 몇 개의 작업이 실행되는가?”를 보면서 동시성과 병렬성을 구분해 보자.
지금 코어 1이 작업 A의 첫 단계를 실행하고 있다. 한 순간에 실행되는 작업은 하나다.
동시성 모드에서는 코어 1개가 A와 B를 번갈아 처리한다. 빠른 전환 때문에 둘이 함께 진행되는 것처럼 보인다.
CONCURRENCY
여러 작업을 모두 진행 중으로 관리하는 구조다. 한 순간에 하나만 실행해도 동시성을 만들 수 있다.
PARALLELISM
서로 다른 코어·GPU·Worker 같은 실행 자원이 같은 순간에 여러 작업을 처리하는 방식이다.
WHERE IT APPEARS
컴퓨터는 한 가지 일만 하지 않기 때문에, 동시성과 병렬성을 구분해야 한다.
브라우저·음악·에디터를 한 코어에서 번갈아 실행하면 동시성, 여러 코어에서 나누어 실행하면 병렬성이다.
요청 A의 DB 응답을 기다리는 동안 요청 B를 받는 것은 동시성이다. 여러 코어가 각각 계산하면 병렬성도 함께 나타난다.
이미지 영역이나 영상 프레임을 여러 코어 또는 GPU에 나누어 같은 순간에 처리하면 병렬성이다.
A JAVASCRIPT NOTE
하나의 JavaScript 이벤트 루프에서 JS 코드는 한 번에 하나씩 실행된다. 그러나 브라우저와 Node.js는 별도 실행 자원을 제공하므로, JavaScript가 병렬성과 관계없다고 단정하면 안 된다.
SIDE BY SIDE
| 기준 | 동시성 | 병렬성 |
|---|---|---|
| 초점 | 여러 일을 겹쳐 진행하도록 관리하는 구조 | 여러 실행 자원이 같은 순간에 실행하는 방식 |
| 싱글 코어 | 가능 | 서로 다른 작업의 실제 동시 실행은 어려움 |
| 예시 | time slicing, 이벤트 루프, 비동기 I/O | 멀티 코어 CPU, GPU, Web Worker |
| 기억할 말 | “기다리는 동안 다른 일을 할 수 있나?” | “실제로 같은 순간에 계산하나?” |
SAY IT YOURSELF
정의를 외우기보다 아래 질문에 상황을 넣어 답해 보자.
CHECK YOUR UNDERSTANDING
먼저 답을 적어 본 뒤 정답을 열어 보자.
1. 거짓. 싱글 코어에서도 작업을 짧게 번갈아 처리하거나, 한 작업이 응답을 기다리는 동안 다른 작업을 진행하면 동시성을 만들 수 있다.
2. C. 두 코어가 같은 순간에 서로 다른 이미지 영역을 계산하므로 실제 병렬 실행이다. A와 B는 동시성의 예다.
3. 동시성은 여러 작업이 겹쳐 진행되도록 순서와 대기를 구성하는 방법이고, 병렬성은 여러 실행 자원이 여러 작업을 같은 순간에 실제로 처리하는 방식이다.
4. 요청 A의 대기 시간에 서버가 놀지 않고 요청 B를 진행하기 때문이다. 이 사례만으로 두 요청의 CPU 코드가 같은 순간에 실행되었다고 볼 수는 없다.
5. 하나의 이벤트 루프에서는 JS 코드가 한 번에 하나씩 실행된다. Web Worker는 별도 실행 흐름에서 작업하므로 여러 Worker를 사용하면 작업을 실제 병렬로 실행할 수 있다.