💡 Virtual Thread의 기본 개념 이해하기

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

NAVER D2

d2.naver.com

NAVER D2

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 6일 오전 2:20

 • 

저장 43조회 4,238

댓글 0