Java Virtual Thread
2025. 7. 12. 23:51ㆍJava/일반
반응형
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 |