๐ก 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