- 가상 스레드(Project Loom)는 기존 플랫폼 스레드의 커널 스레드 1:1 매핑 한계를 극복하여 처리량을 높이는 자바의 새로운 동시성 모델입니다. 🧵
- 기존 플랫폼 스레드는 커널 스레드와 1:1 매핑되어 있어, 스레드 수 증가에 따른 커널 스레드 운영 비용 문제로 무작정 늘릴 수 없었습니다. 🚫
- 비동기 프로그래밍은 I/O 대기 중인 스레드를 재활용하여 처리량을 높이지만, 높은 학습 곡선, 디버깅 어려움, 자바 플랫폼 철학과의 충돌 등의 단점이 있었습니다. 🔄
- 가상 스레드는 JVM이 제어 가능한 사용자 영역에서 생성되며, 커널 스레드와 직접 매핑되지 않아 훨씬 많은 스레드를 생성할 수 있습니다. 🚀
- 가상 스레드는
Carrier Thread(기존 플랫폼 스레드)에 의해 스케줄링되며, Carrier Thread는 CPU 코어 수만큼 생성되어 ForkJoinPool을 통해 가상 스레드 작업을 처리합니다. 👷
- 가상 스레드의 핵심은
Continuation 메커니즘으로, I/O 요청 시 yield()를 호출하여 Carrier Thread에서 분리되고, 작업 상태를 힙에 저장하여 Carrier Thread가 다른 작업을 수행하게 합니다. ⏸️
- I/O 응답이 오면 저장된 상태를 복원하여 중단된 지점부터 작업을 재개함으로써 Carrier Thread의 유휴 시간을 최소화하고 처리량을 극대화합니다. ♻️
- 가상 스레드는 CPU 바운드 작업이 많거나, Carrier Thread 자체가 블록되는 경우, 또는 백프레셔 조절이 필요한 경우에는 성능 이점이 적거나 오히려 문제가 될 수 있으므로 신중한 적용이 필요합니다. ⚠️
- 가상 스레드는 동기 코드의 단순함을 유지하면서도 높은 동시성을 제공하여 개발 복잡도를 줄이는 것을 목표로 합니다. ✨