CPU Bound와 스레드 컨텍스트 스위칭

CPU Bound 작업에서 스레드를 늘려도 처리 속도가 비례해서 빨라지지 않습니다. CPU 코어 수와 컨텍스트 스위칭 비용 때문입니다. CPU Bound란? 이미지/영상 처리, 압축, 수치 계산, 암호화처럼 외부 대기 없이 CPU를 직접 사용하는 작업입니다. 작업이 끝날 때까지 CPU를 계속 점유하며, 연산 자체가 병목이 됩니다. I/O Bound 작업(DB 쿼리, 네트워크 호출)과 달리 스레드가 대기 상태에 들어가지 않습니다. 1 코어 기준 동작 1 코어에서 여러 스레드를 돌리는 건 동시성(Concurrency)입니다. 실제로 동시에 실행되는 게 아니라 OS가 시간을 쪼개 번갈아 실행하는 방식입니다. ...

2026년 4월 17일

Java 멀티스레드 vs Kotlin 코루틴

Java 멀티스레드와 Kotlin 코루틴의 핵심 차이는 스케줄링 주체입니다. OS가 강제로 전환하느냐, 코드가 자발적으로 양보하느냐. OS 레벨 병렬처리 OS 레벨 ├── 멀티 프로세스 (독립 메모리) └── 멀티 스레드 (공유 메모리, OS 스케줄링) 언어 레벨 └── 코루틴 (공유 메모리, 언어 스케줄링) 핵심 차이: 누가 스케줄링하느냐 Java 멀티스레드 OS가 CPU 클럭 단위로 강제 스위칭 → 선점형(Preemptive) 스레드 전환 비용이 큼 (스택, 레지스터 저장/복원) 스레드 1개 = OS 스레드 1개 (~1MB) Kotlin 코루틴 suspend 포인트에서 자발적으로 스레드 반납 → 협력형(Cooperative) 전환 비용이 매우 작음 (힙에 상태 저장, ~수KB) 스레드 몇 개 위에서 코루틴 수천 개 동작 가능 계층 구조 코루틴은 스레드를 대체하는 게 아니라 스레드 위에서 동작합니다. ...

2026년 3월 22일