virtual-thread

#thread #virtual-thread

λ°°κ²½

  • μ œν•œλœ λ©”λͺ¨λ¦¬ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” [[os/thread]] 의 μˆ˜κ°€ μ œν•œλ˜μ–΄μžˆμŒ.

  • λ˜ν•œ ν•„μš”ν•œ μŠ€λ ˆλ“œ μˆ˜κ°€ μ¦κ°€ν•˜λ©΄μ„œ, [[context-switching]] λΉ„μš©λ„ 증가함.

  • μœ„μ˜ 2κ°€μ§€ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ κ°œλ…μ΄ [[virtual-thread]].

νŠΉμ§•

  • [[context-switching]] λΉ„μš©μ΄ μ €λ ΄ν•˜λ‹€

image
  • μ™œ?

    • platform thread μœ„μ—μ„œ μ—¬λŸ¬ virtual thread κ°€ λ²ˆκ±Έμ•„κ°€λ©΄μ„œ μ‹€ν–‰λ˜λŠ” ν˜•νƒœ

    • κΈ°μ‘΄ 방식보닀 μ μœ ν•˜λŠ” λ©”λͺ¨λ¦¬ μ‚¬μ΄μ¦ˆκ°€ 적고, 컀널 μ˜μ—­μ˜ 호좜이 적음

ꡬ쑰

image1
image
  • μŠ€μΌ€μ₯΄λŸ¬κ°€ platform thread λ₯Ό κ΄€λ¦¬ν•œλ‹€.

  • platform thread λŠ” virtual thread 의 μž‘μ—… λΆ„λ°°λ₯Ό κ΄€λ¦¬ν•œλ‹€

image2
  • virtual threadλŠ” carrierThread λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

    • carrierThread λŠ” platform thread 이닀.

    • carrierThread λŠ” workQueueλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

  • virtual thread λŠ” scheduler λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

    • scheduler λŠ” ForkJoinPool 이닀

    • scheduler λŠ” carrierThread 의 poll 이닀

    • scheduler λŠ” virtual thread 의 μŠ€μΌ€μ₯΄λ§μ„ λ‹΄λ‹Ήν•œλ‹€

  • virtual thread λŠ” runConfiguration 을 κ°€μ§€κ³  μžˆλ‹€.

    • runConfiguration 은 μ‹€μ œ μž‘μ—… λ‚΄μš©(runnable) 을 κ°€μ§€κ³  μžˆλ‹€

정리

  • virtual thread λŠ” κΈ°μ‘΄ platform thread λ₯Ό λŒ€μ²΄ν•˜λŠ” 것이 λͺ©μ μ΄ μ•„λ‹˜.

    • platform thread 의 기닀림에 λŒ€ν•œ κ°œμ„ μ΄ λͺ©μ .

  • virtual thread λ₯Ό λ„μž…ν•œλ‹€κ³  ν•΄μ„œ, 무쑰건적으둜 μ²˜λ¦¬λŸ‰μ΄ λ†’μ•„μ§€μ§„ μ•ŠμŒ.

  • λ¦¬μ•‘ν‹°λΈŒ ν”„λ‘œκ·Έλž˜λ°κ³Ό λ™μΌν•˜κ²Œ 'μ²˜λ¦¬λŸ‰' 은 μ¦κ°€ν•˜μ§€λ§Œ 더 가독성이 μ’‹κ³ , 개발자 μΉœν™”μ μΈ 방법이닀.

Reference

  • https://techblog.woowahan.com/15398/

  • https://tech.kakao.com/2023/12/22/techmeet-virtualthread/

Last updated

Was this helpful?