(Java) Virtual Threads (가상 쓰레드) 란?
Virtual Threads
가상 쓰레드란?
Summary
가상 스레드는 처리량이 많은 동시 애플리케이션을 작성, 유지 관리 및 관찰하는 수고를 획기적으로 줄여주는 경량 스레드입니다.
Open JDK 에서 소개한 Virtual Thread :
History
- 요약 : JDK 21 부터 최종버전의 Virtual Thread 가 지원된다. (thread-local 변수 지원 등)
가상 스레드는 JEP 425에 의해 미리보기 기능으로 제안되었고 JDK 19로 전달되었습니다. 피드백을 위한 시간을 허용하고 더 많은 경험을 얻기 위해 JEP 436에 의해 다시 미리보기 기능으로 제안되었고 JDK 20으로 전달되었습니다. 이 JEP는 개발자 피드백에 의해 알려지는 JDK 20의 다음과 같은 변경 사항으로 JDK 21에서 가상 스레드를 최종 결정할 것을 제안합니다:
이제 가상 스레드는 항상 thread-local 변수를 지원합니다. 미리 보기 릴리스에서와 같이 thread-local 변수를 가질 수 없는 가상 스레드를 더 이상 만들 수 없습니다. thread-local1 변수에 대한 지원이 보장되므로 더 많은 기존 라이브러리를 가상 스레드와 함께 변경되지 않고 사용할 수 있으며 가상 스레드를 사용하기 위해 작업 중심 코드를 마이그레이션하는 데 도움이 됩니다.
Executors.newVirtualThreadPerTaskExecutor()를 통해 생성된 것과 달리 Thread.Builder API를 사용하여 직접 생성된 가상 스레드도 이제 기본적으로 수명 동안 모니터링되며 가상 스레드 관찰 섹션에 설명된 새 스레드 덤프를 통해 관찰할 수 있습니다.
Goals & Non-Goals
- 요약 : Virtual Thread 를 통해 하드웨어를 최적으로 활용하도록 한다. 기존 코드의 큰 변경없이 적용할 수 있도록 한다.
Goals
- 요청별 단순 스레드 스타일로 작성된 서버 응용프로그램이 최적에 가까운 하드웨어 활용도로 확장될 수 있도록 지원합니다.
- java.lang.Thread API를 사용하는 기존 코드를 사용하여 최소한의 변경으로 가상 스레드를 채택할 수 있습니다.
- 기존 JDK 도구를 사용하여 가상 스레드의 문제 해결, 디버깅 및 프로파일링을 쉽게 수행할 수 있습니다.
Non-Goals
- 기존 스레드 구현을 제거하거나 가상 스레드를 사용하기 위해 기존 애플리케이션을 자동으로 마이그레이션하는 것은 목표가 아닙니다.
- 자바의 기본 동시성 모델을 바꾸는 것은 목표가 아닙니다.
- 자바 언어 또는 자바 라이브러리에서 새로운 데이터 병렬 구조를 제공하는 것은 목표가 아닙니다. Stream API 는 여전히 큰 데이터 세트를 병렬로 처리하는 선호되는 방법입니다.