[Java] Virtual Thread

Virtual Thread๋Š” Java 19๋ถ€ํ„ฐ ํ”„๋ฆฌ๋ทฐ๋กœ ์‹คํ—˜์ค‘์ธ ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ ๊ธฐ๋Šฅ์ด๋‹ค.
Java 20์—์„œ๋„ ํ”„๋ฆฌ๋ทฐ๋กœ ๋‚˜์™”๋Š”๋ฐ, ์–ธ์ œ ์•ˆ์ •ํ™”๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค...

๊ทธ๋ž˜์„œ ์•„์ง์€ ์ œ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋‹ค.
์ด๋Ÿฐ๊ฒŒ ๋‚˜์˜ฌ ์˜ˆ์ •์ด๋ž€ ๊ฒƒ๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.



์ด๊ฒŒ ๋ญ”๊ฐ€?

๊ธฐ์กด์— ์ž๋ฐ”์—์„œ ์ œ๊ณต๋˜๋˜ Thread ๊ธฐ๋Šฅ์€ ์ง„์งœ "๋„ค์ดํ‹ฐ๋ธŒ ์Šค๋ ˆ๋“œ"๋‹ค.
๋„ค์ดํ‹ฐ๋ธŒ ์Šค๋ ˆ๋“œ๋Š” ์ง„์งœ ์Šค๋ ˆ๋“œ๋ฅผ ๋„์šฐ๋Š”๋ฐ, ์ด๊ฑด ์ตœ์ ํ™”๋‚˜ ๋™๊ธฐํ™”์— ์žˆ์–ด์„œ ์†์‹ค์ด๋‚˜ ๋น„ํšจ์œจ, ์œ„ํ—˜์„ฑ์ด ๊ทน์‹ฌํ•œ ํŽธ์ด๋‹ค.

๊ทธ์— ๋ฐ˜ํ•ด ์š”์ฆ˜ ๋Œ€๋‘๋˜๊ณ  ์žˆ๋Š” "๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ"๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์— ๊ฐ€์งœ ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋„์›Œ์„œ ํ•ธ๋“ค๋งํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์ตœ์ ํ™”๊ฐ€ ์‰ฝ๊ณ  ๊ฐ€๋ณ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ์ ๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œ๋จน๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์ง„์งœ ๋„ค์ดํ‹ฐ๋ธŒ ์Šค๋ ˆ๋“œ๋ฅผ ๋„์›Œ์„œ ํ•ธ๋“ค๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Go์˜ ๊ณ ๋ฃจํ‹ด, Rust์˜ tokio.rs, ์ฝ”ํ‹€๋ฆฐ์˜ ์ฝ”๋ฃจํ‹ด, C#์˜ TPL ๋“ฑ์ด ์ด๋Ÿฌํ•œ ์ง€ํ–ฅ์ ์„ ๊ฐ–๊ณ  ์žˆ๊ณ , ๋˜ ์„ฑ๊ณตํ–ˆ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” ์ด์ œ์•ผ ์ด๋Ÿฐ๊ฑธ ๋„์ž…ํ•˜๋ ค๋Š” ์›€์ง์ž„์ด ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค.
์‚ฌ์‹ค ์ด๋Ÿฐ "๊ทธ๋ฆฐ ์Šค๋ ˆ๋“œ"์˜ ๊ฐœ๋…์€ ์ž๋ฐ”๊ฐ€ ๋งŒ๋“  ์šฉ์–ด์˜€๋Š”๋ฐ... ๋Œ๊ณ  ๋Œ์•„ ์›์ ์œผ๋กœ ํšŒ๊ท€ํ•˜๋Š” ๋А๋‚Œ์ด๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋Ÿฐ ํ˜•ํƒœ๋‹ค.

์ถœ์ฒ˜ How to Use Java 19 Virtual Threads | by omgzui | Javarevisited | Medium




์‚ฌ์šฉ๋ฒ•

์šฐ์„ , stable ๊ธฐ๋Šฅ์ด ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์„ ์ผœ์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

VM ์˜ต์…˜์—๋„ --enable-preview์„ ๋„ฃ์–ด์ฃผ๊ณ 

์ปดํŒŒ์ผ ์˜ต์…˜์—๋„ --enable-preview๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿผ ๋Œ€์ถฉ ์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ofVirtual ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ ˆ๋“œ์šฉ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด start ๋“ฑ์˜ ํ•จ์ˆ˜๋กœ ์‹œ์ž‘์„ ํ•˜๊ณ , Thread ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
start๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ธฐ์กด์˜ Thread๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฐ์ฒด์ธ์ง€๋ผ ๊ธฐ์กด๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜น์€, startVirtualThread ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ € ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋™์ž‘์€ ๋™์ผํ•˜๋‹ค.



์ฐธ์กฐ
https://jenkov.com/tutorials/java-concurrency/java-virtual-threads.html
https://medium.com/javarevisited/how-to-use-java-19-virtual-threads-c16a32bad5f7
https://blogs.oracle.com/javamagazine/post/java-loom-virtual-threads-platform-threads