Java Virtual Thread

Yeon Seong Hwang·2024년 5월 11일
1
post-thumbnail

📌 Thread

thread는 관리 주체에 따라 user level threadkernel level thread로 구분할 수 있다.

  • user level thread: library를 사용하여 생성되어 user mode에서 동작하는 thread를 의미하며, CPU에서 실행되려면 kernel level thread로 mapping되어야 한다
  • kernel level thread: OS 내에서 생성되어 kernel mode에서 동작하는 thread로 kernel이 직접 관리하며 CPU에서 실제로 실행되는 단위이다

thread

💡 user level thread는 세 가지 구현 방식이 있는데, Java의 thread는 (b)에 해당한다고 한다


📌 Virtual Thread

Spring Boot 같은 애플리케이션에서 사용자 요청을 처리하기 위해서는 하나의 thread가 사용되는데, OS thread 개수는 유한하기 때문에 throughput을 높이는 데 한계가 있다.
이 문제를 해결하기 위해 reactive programming이 발전했지만 진입장벽이 높고, 디버깅이 힘들다는 문제가 있다.
결국, Java 21에는 virtual thread라는 개념이 추가되었다.

virtual threadJVM 자체적으로 thread를 scheduling하여 여러 개의 thread를 하나의 kernel level thread로 매핑함으로써 throughput을 높일 수 있다.
virtual-thread

💡 virtual thread(N) : user level thread(1) : kernel level thread(1) 구조이다

그리고 일반 thread에 비패 stack memory 크기가 작고, user mode 내에서 생성되어 kernel 영역 호출이 적기 때문에 context switch 비용 또한 저렴하다.
하지만 그렇기 때문에 context switch 비용이 빈번한 I/O 작업이 많은 환경에서 쓰는 것이 적합하며, CPU 작업이 많은 환경에서는 오히려 성능이 떨어질 수 있다.

💡 일반적으로 많은 프로그래밍 모델에서는 I/O 작업이 수행될 때 CPU가 다른 작업을 수행할 수 있도록 작업을 전환하는 context switch가 발생한다


🔗 참고자료

profile
온 몸으로 기억하기 위해 기록합니다. 🌱

0개의 댓글