CONCURRENCY
동시성은 작업을 관리하는 방식
프로세스 안의 여러 스레드나 작업을 한 코어에서 번갈아 실행하거나, 한 작업이 I/O를 기다리는 동안 다른 작업을 진행시키는 구조입니다.
02강 · 여러 일을 처리하는 방법
여러 일을 번갈아 진행하는 것과 여러 실행 자원이 실제로 동시에 일하는 것은 어떻게 다를까?
START HERE
선택한 항목을 오늘 설명의 출발점으로 삼는다. 여러 개를 골라도 괜찮다.
WATCH THE DIFFERENCE
“한 순간에 실제로 몇 개의 작업이 실행되는가?”를 보면서 동시성과 병렬성을 구분해 보자.
HOW TO READ A VISUAL
모드를 고르고 한 칸씩 진행하세요. 한 칸 안에서 실제로 몇 개의 실행 자원이 일하고 있는지가 이 시각 자료의 핵심 질문입니다.
읽는 순서: 질문 → 조작 → 변화 → 해설. “둘 다 진행 중”이라는 느낌보다, 현재 한순간에 실제로 몇 개의 코어가 계산하는지를 먼저 확인하세요.
지금 코어 1이 작업 A의 첫 단계를 실행하고 있다. 한 순간에 실행되는 작업은 하나다.
동시성 모드에서는 코어 1개가 A와 B를 번갈아 처리한다. 빠른 전환 때문에 둘이 함께 진행되는 것처럼 보인다.
FROM 01강
1강의 실행 공간과 실행 흐름을 이어서 보면, 동시성과 병렬성은 “스레드가 여러 개 있는가?”가 아니라 “그 일을 어떤 실행 자원으로 진행하는가?”를 묻는 개념입니다.
CONCURRENCY
프로세스 안의 여러 스레드나 작업을 한 코어에서 번갈아 실행하거나, 한 작업이 I/O를 기다리는 동안 다른 작업을 진행시키는 구조입니다.
PARALLELISM
서로 다른 코어·GPU 같은 실행 자원이 같은 순간에 여러 작업의 명령어를 실제로 계산하는 구조입니다. Worker는 별도 실행 흐름일 뿐, 병렬 실행을 보장하지 않습니다.
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, Worker가 다른 코어에 배치된 경우 |
| 기억할 말 | “기다리는 동안 다른 일을 할 수 있나?” | “실제로 같은 순간에 계산하나?” |
SAY IT YOURSELF
정의를 외우기보다 아래 질문에 상황을 넣어 답해 보자.
CHECK YOUR UNDERSTANDING
먼저 답을 적어 본 뒤 정답을 열어 보자.
1. 거짓. 싱글 코어에서도 작업을 짧게 번갈아 처리하거나, 한 작업이 응답을 기다리는 동안 다른 작업을 진행하면 동시성을 만들 수 있다.
2. C. 두 코어가 같은 순간에 서로 다른 이미지 영역을 계산하므로 실제 병렬 실행이다. A와 B는 동시성의 예다.
3. 동시성은 여러 작업이 겹쳐 진행되도록 순서와 대기를 구성하는 방법이고, 병렬성은 여러 실행 자원이 여러 작업을 같은 순간에 실제로 처리하는 방식이다.
4. 요청 A의 대기 시간에 서버가 놀지 않고 요청 B를 진행하기 때문이다. 이 사례만으로 두 요청의 CPU 코드가 같은 순간에 실행되었다고 볼 수는 없다.
5. 하나의 이벤트 루프에서는 JS 코드가 한 번에 하나씩 실행된다. Web Worker는 별도 실행 흐름을 만들지만, 실제 병렬 실행은 실행 환경이 다른 코어에 배치할 때 가능하다.