Java 의 미래 Virtual Thread
참고 링크
1. Virtual Thread 소개
2018 년 Project Loom 으로 시작된 경량 스레드 모델
2023년 JDK21 에 정식 feature 추가
스레드 생성 및 스케줄링 비용이 기존 스레드보다 저렴
스레드 스케줄링을 통해서 Non-Blocking I/O 지원
기존 스레드를 상속하여 코드 호환
1.1 스레드 생성 / 스케줄링 속도가 빠르다.
기존 자바 스레드는 생성 비용이 크다.
스레드 풀의 존재 이유
사용 메모리 크기가 크다 (공간적 비용, 최대 2MB)
OS 에 의해 스케줄링 (1:1 매핑)
Virtual Thread 는 생성 비용이 작다.
스레드 풀 개념 X
요청이 들어올때마다 생성되고,
응답이 나갈때마다 파괴된다.
사용 메모리 크기가 작다. (최대 50KB)
OS 가 아닌 JVM 내 스케줄링
1.2 Non-Blocking I/O 지원
증가하는 I/O blocking time Thread per request 모델에서 특히 병목이 되는 blocking time

Non-Blocking I/O 는 Blocking time 을 획기적으로 줄여준다.

Virtual Thread Non-Blocking I/O
JVM 스레드 스케줄링
Continuation 활용
1.3 기존 스레드 상속


2. Virtual Thread 동작 원리
2.1 일반 스레드 특징
플랫폼 스레드
OS 에 의해 스케줄링
커널 스레드와 1:1 매핑
작업 단위
Runnable


2.2 Virtual Thread 특징
가상 스레드
JVM 에 의해 스케줄링
Thread 는 생성 및 스케줄링 시 커널 영역 접근
Virtual Thread 는 커널 영역 접근 없이 단순하게 Java 객체 생성 가능
즉, Virtual Thread 는 생성 시 시스템 콜 X
캐리어 스레드와 1:N 매핑
작업 단위 Continuation




2.3 Continuation 작업 단위
Kotlin 코루틴 동작방식

Continuation (컨텍스트 스위칭 방식이랑 비슷)
실행 가능한 작업 흐름
중단 가능
중단 지점으로부터 재실행 가능



Continuation 사용 이유
Thread 는 작업 중단을 위해 커널 스레드를 중단
Virtual Thread 는 작업 중단을 위해서 Continuation yield
작업이 block 되어도 실제 스레드는 중단되지 않고 다른 작업 처리
커널 스레드 중단이 없으므로 시스템 콜 X -> 컨텍스트 스위칭 비용이 낮다.
3. 기존 스레드 모델 서버와 비교
3.1 기존 스레드 모델

3.2 Virtual Thread 모델

4. 성능 테스트
5. 서비스 적용 시 주의사항
Last updated