스프링캠프 2025 [Track 2] 4. Virtual Thread 어디까지 보고 오셨어요? (박성훈, 정승주)
- 스프링캠프 2025에서 버추얼 쓰레드의 내부 동작 원리와 현업 적용 고민 해결을 위한 발표가 진행됨 🎉
- 버추얼 쓰레드는 높은 동시 처리량 확보, 기존 코드 최소 변경, 쉬운 디버깅/프로파일링을 목표로 JDK21에 도입됨 🚀
- 스프링에서 프로퍼티 설정 한 줄로 버추얼 쓰레드 사용 가능하며, 블로킹 I/O 처리량 100% 향상 효과를 보임 📈
- 버추얼 쓰레드는 JVM 레벨에서 스케줄링 및 컨텍스트 스위칭을 수행하여 커널 레벨 오버헤드를 줄임 ⚙️
- 컨티뉴에이션을 통해 런너블의 실행을 중단/재개하며, 스택 프레임을 힙에 저장/복원하는 방식으로 구현됨 💾
- 버추얼 쓰레드는 컨티뉴에이션과 런너블을 가지고, 포크조인풀에 런컨티뉴에이션을 등록하여 실행됨 🧵
- 자바는 NIO 소켓 임플리를 통해 소켓 I/O를 자바 코드 레벨로 올리고, 논블로킹 소켓을 사용하여 커널 블로킹 문제 해결 🧩
- 폴러는 별도 플랫폼 쓰레드에서 소켓 상태를 감시하고, 준비된 소켓의 버추얼 쓰레드를 언파크하여 실행 재개 👁️
- NIO 소켓 임플리는 논블로킹 소켓을 사용하여 I/O를 수행하고, 폴러를 통해 소켓 준비 상태를 감시하며, 컨티뉴에이션을 사용하여 버추얼 쓰레드를 중단/재개함 🔄