Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Virtual Threadsで実現する性能改善

Toru Takahashi
June 15, 2024
1.3k

Virtual Threadsで実現する性能改善

JJUG CCC 2024 Springでの登壇資料です。
https://ccc2024spring.java-users.jp/

Toru Takahashi

June 15, 2024
Tweet

More Decks by Toru Takahashi

Transcript

  1. 自己紹介 髙橋 透 NRIネットコム株式会社 AWS Community Builder (2024/03~) よくやってること: • Webアプリ開発・運用

    ◦ Java/SpringBoot(本業) ◦ AWS Amplify(趣味) • 居酒屋巡り ※スライドは後ほどUPします 2
  2. なんで2種類のスレッドが作られるのか Javaスレッドがあるとき • Javaアプリの処理はJVM上のス レッドで実行される • JVMはどのマシンでも動作するの でプラットフォームに依存しない • Write

    once, run anywhere (WORA) Javaスレッドがないとき • Javaアプリの処理はOSスレッドで 実行される • OSスレッドはOS実装に影響を受 ける。実行プラットフォームに依存 する。 11
  3. OS Virtual Threadsの世界の登場人物 JVM Virtual Thread Carrier Thread OS Thread

    • Virtual Thread ◦ JVM内で作成される仮想スレッド • Carrier Thread ◦ Virtual Threadがマウントされるスレッド ◦ Carrier ThreadはOSスレッドとマッピングされる • JVMがVirtual ThreadをどのCarrierにマウントするかを判断する 18
  4. OS Virtual Threadsの挙動 JVM Virtual Thread 1 Carrier Thread 1

    OS Thread 1 unmount Carrier Thread 2 OS Thread 2 別のCTに mount IO待ち 発生 21
  5. OS Virtual Threadsの挙動 JVM Virtual Thread 1 Carrier Thread 1

    OS Thread 1 IO待ち解消 Carrier Thread 2 OS Thread 2 戻って来る unmount 22
  6. Java 1.0時代のスレッドモデル OS JVM Application Thread OS Thread 26 Thread

    Thread Thread シングルコアCPU なので一個だけ
  7. OS Virtual ThreadsはJVM内で大量生成可能 JVM Virtual Thread Carrier Thread OS Thread

    30 Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Carrier Thread OS Thread Carrier Thread OS Thread
  8. OS Virtual ThreadsとOSスレッドはM対N(M>N) JVM Virtual Thread Carrier Thread OS Thread

    31 Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Carrier Thread OS Thread Carrier Thread OS Thread M個 N個
  9. 参考 • Java21のVirtualThreadsに対する自分の理解 #Java - Qiita • Javaのスレッドモデル:グリーンスレッドモデル・ネイティブスレッドモデル・M:Nモデ ル -

    Qiita • Java 19の注目新機能Virtual Threadについて ~TechFeed Conference 2022講 演より | gihyo.jp • Spring Framework 6.1 / Spring Boot 3.2 の注目機能紹介 • Virtual Threads - 導入の背景と、効果的な使い方 - - Speaker Deck • 【図解】はじめてでもわかるJMeterの使い方 - RAKUS Developers Blog • JVM入門 -Javaプログラムが動く仕組み- - Speaker Deck 45