2What — 동시성 프로그래밍이란
3- 동시성(Concurrency): 여러 작업이 논리적으로 동시에 진행되는 프로그래밍 모델
4- 병렬성(Parallelism): 여러 작업이 물리적으로 동시에 실행되는 것 (멀티코어 활용)
5- 동시성은 "구조"의 문제, 병렬성은 "실행"의 문제 (Rob Pike, 2012)
6- C++에서 동시성 = 스레드, 뮤텍스, 조건변수, atomic, future 등의 도구로 멀티코어를 활용하는 기술
7Why — 왜 지금 동시성이 필수인가
8- 물리적 한계: 2004년경 CPU 클럭 속도가 ~3.8GHz에서 정체 — 전력 장벽(Power Wall)에 부딪힘 (Sutter, 2005: "The Free Lunch Is Over")
9- 무어의 법칙 변질: 트랜지스터 수는 늘어나지만, 단일 코어 성능(IPC × Clock)은 연 ~3%만 개선 (Hennessy & Patterson, 2019)
10- 멀티코어 전환: Intel Core 2 Duo(2006) 이후 코어 수로 성능을 확보하는 전략이 주류
11- 핵심 위기: 8코어 CPU에서 단일 스레드 프로그램은 코어 1개만 사용 → 나머지 7개(87.5%)는 유휴 상태
12S = \frac{1}{(1 - P) + \frac{P}{N}}
13- 위는 암달의 법칙(Amdahl's Law) — P: 병렬화 가능 비율, N: 코어 수
14- 예: 코드의 90%가 병렬화 가능(P = 0.9), 8코어 → 최대 속도 향상 = \frac{1}{0.1 + 0.9/8} \approx 4.7배
15- 병렬화 비율이 낮으면 코어를 아무리 늘려도 효과 미미 → 동시성 설계가 아키텍처 수준의 결정
16How — 실제 산업에서 동시성이 쓰이는 곳
17- 웹 서버: 동시 요청 10,000개를 단일 스레드로 처리하면 평균 응답 시간이 초 단위로 폭증. 스레드 풀로 분산하면 밀리초 단위 유지 (nginx, Apache 워커 모델)
18- 게임 엔진: 렌더링(GPU 커맨드 제출), 물리 시뮬레이션, AI 경로 탐색, 오디오를 별도 스레드로 분리 — Unreal Engine의 TaskGraph 시스템 (Sweeney, GDC 2015)
19- 데이터 파이프라인: ETL 작업에서 I/O 대기 시간 동안 다른 청크를 처리 — 파이프라인 병렬화로 처리량 3~5배 향상
20- ML 학습: 데이터 로딩 스레드 + GPU 연산 스레드를 오버랩 — PyTorch DataLoader의 num_workers 파라미터가 이 패턴
21동시성을 모르면 생기는 구체적 병목
22- 비유: 8차선 고속도로(8코어)에 차 1대(단일 스레드)만 달리는 상황
23- CPU 사용률 모니터에서 코어 1개만 100%, 나머지 0% → "가로줄 패턴"
24- 서버 비용: 같은 워크로드를 단일 스레드로 처리하면 8배 비싼 인스턴스가 필요
25- 응답성: UI 스레드에서 무거운 연산 실행 → 앱이 "Not Responding" 상태로 전환
26C++ 동시성의 역사적 맥락
27- C++11 이전: OS별 API(pthreads, Win32 Threads)에 의존 — 이식성 없음
28- C++11: std::thread, std::mutex, std::future 도입 — 언어 수준 동시성 지원 (ISO/IEC 14882:2011)
29- C++17: 병렬 STL 알고리즘 (std::execution::par)
30- C++20: std::jthread, std::latch, std::barrier, 코루틴
31- 흐름: 플랫폼 종속 → 표준화 → 고수준 추상화로 진화 중
32정리 — 이 레슨에서 배울 것
33- 동시성은 선택이 아닌 필수 — 멀티코어 하드웨어를 제대로 쓰려면 반드시 알아야 하는 기술
34- 이 모듈에서는 스레드 생성 → 동기화 → lock-free → 고수준 패턴까지 단계적으로 학습
35- 목표: "코어를 낭비하지 않는 C++ 프로그래머"가 되는 것