NAVER D2
d2.naver.com
Naver D2 에서 JDK21 에 정식 도입된 Virtual Thread 의 기본 개념을 자세히 설명한 글을 올려주셔서 공유드립니다.
간단히 정리해보자면,
JDK21 에 정식 도입된 Virtual Thread는 기존의 KLT(kernel-level thread)와 ULT(user-level thread)를 1:1 매핑하여 사용하는 JVM의 스레드 모델을 개선한, 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 모델입니다.
기존 Java 의 Thread 모델은 java.util.concurrent.ExecutorService 를 두어 JVM 내부에서 java.lang.Thread 객체를 관리/실행 합니다.
ExecutorService 를 통해 스케줄링되는 java.lang.Thread 객체를 들여다보면 JVM 에 존재하는 start0 함수를 JNI(Java Native Interface) 를 통해 호출하도록 되어있고,
JVM 에서 설치된 각 머신 OS 에 맞게 커널 스레드를 만들어 실행하도록 되어있습니다.
Virtual Thread 는 기존 KLT(1) : ULT(1)의 구조인 기존 Java Thread 와 다르게
KLT(1) : ULT(1) : Virtual Thread(N)의 구조로 사용되는 형태입니다.
Heap 에 수많은 Virtual Thread를 할당해놓고, 플랫폼 스레드에 대상 Virtual Thread 를 마운트/언마운트하여 컨텍스트 스위칭을 수행하도록 하는데요,
이를 통해 문제가 될 수 있는 컨텍스트 스위칭 비용을 줄이도록 하였습니다.
이처럼 Virtual Thread 는 스레드의 크기와 컨텍스트 스위칭 비용이 많이 감소한 모델이기 때문에
기존에 Netty/WebFlux 등과 같은 비동기 솔루션 대비 Spring MVC/Tomcat 등에서 나타났던 단점이 많이 개선될 수 있습니다.
Virtual Thread 와 관련된 좀 더 자세한 내용은 공유드린 원문 내용과 함께보면 좋은 글을 참고해주세요.
📚 원문
https://d2.naver.com/helloworld/1203723
📚 함께보면 좋은 글
💡 Java 의 Project Loom 이 만들어지고 있어요! 조금만 기다려주세요!: https://careerly.co.kr/comments/63588
🌈 함수에도 색깔이 있는걸 아시나요?: https://careerly.co.kr/comments/63069
🎉 Java 가상 스레드가 JDK 21 에 정식 지원 됩니다: https://careerly.co.kr/comments/82046
🍀 Spring 6.1 부터 JDK 21 이 지원됩니다 🎉: https://careerly.co.kr/comments/89053
🚀 Java의 미래, Virtual Thread: https://careerly.co.kr/comments/96595
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 3월 6일 오전 2:20