Java Virtual Thread

2025. 7. 12. 23:51Java/일반

반응형

Virtual Thread

Java 21에서 정식으로 도입된 Virtual Thread는 기존의 Kernel-level thread와 User-level thread를 1:1 매핑하여 사용하는 JVM 스레드 모델을 개선한 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 방법입니다.

Java Thread

Java thread는 ExecutorService를 두어 JVM 내부에서 스레드를 관리/실행합니다. 이렇게 ExecutorService를 통해 스케줄링되는 Thread는 JVM을 통해 커널 스레드를 만들어 실행합니다.

Virtual Thread란

Virtual Thread는 기존 Kernel thread(1) : User thread(1)의 구조가 아니라 Kernel thread(1): User thread(1): Virtual thread(N)의 구조로 사용됩니다. 참고로 여기서 User thread는 플랫폼 스레드라고 불립니다.

위 그림과 같이 Heap에 수많은 Virtual Thread를 할당해두고 플랫폼 스레드에 대상 Virtual Thread를 마운트/언마운트하여 컨텍스트 스위칭을 수행합니다. 따라서 컨텍스트 스위칭 비용이 작아질 수 밖에 없습니다.

Virtual Thread 주의사항

  • 생성비용이 작기 때문에 스레드 풀을 만드는 행위 자체가 낭비가 될 수도 있습니다.
  • IO 작업 없이 CPU 작업만 수행하는 것이라면, 성능이 떨어질 수 있습니다.(컨텍스트 스위칭에 이점을 가지고 있기 때문)
  • Virtual thread 내에서 synchronized나 parallelStream 혹은 네이티브 메서드를 사용하면 pinned issue가 발생해 성능 저하를 유발할 수 있습니다.

참고
https://d2.naver.com/helloworld/1203723
https://techblog.woowahan.com/15398/

반응형

'Java > 일반' 카테고리의 다른 글

Stream 사용시 주의사항  (0) 2023.07.05
JPA  (0) 2023.01.22
Java Serialize  (0) 2022.11.27
String Pool  (0) 2022.07.22
Netty  (1) 2022.05.26