第7章. 仮想スレッドを利用する最新のフレームワーク
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
未来を予測する最善の方法は、それを発明することである。
アラン・ケイ
JDK21で仮想スレッドが導入されたことで、Javaエコシステムはフレームワークの並行処理方法に大きな変化を目の当たりにした。最近のフレームワークの多くは、パフォーマンス、スケーラビリティ、リソース効率を改善するために仮想スレッドを採用している。
この章では、Spring Boot、Quarkus、Jakarta EEなどの主要なフレームワークがどのように仮想スレッドを統合しているかを探る。しかし、これらのフレームワークの内部構造には立ち入らない。興味のある人は、各フレームワークを自分で深く調べたいだろうからだ。
始めよう。
Spring Boot
Spring Bootは、Javaエコシステムでエンタープライズアプリケーションを構築するための、 デファクトフレームワークの1つだ。
歴史的に、Spring BootのWebアプリケーションは主にスレッドパーリクエストモデルに従っており、専用のプラットフォームスレッドが各クライアントリクエストを処理する。このアプローチは中程度の負荷ではうまくいくが、大量の同時I/Oバウンドリクエストを処理するときにスケーラビリティの問題が発生する。
これを緩和するために、Spring Bootは非同期プログラミング機能を導入した。 @Asyncのようなアノテーションと抽象化によって非同期プログラミング機能を導入した。 TaskExecutor.しかしこのアプローチでも、次の例に示すように、プラットフォームスレッドの限られたプールに依存していた:
@ConfigurationpublicclassThreadPoolConfig{@BeanpublicAsyncTaskExecutorapplicationTaskExecutor(){ThreadPoolTaskExecutorexecutor=newThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(100);executor.initialize();returnexecutor;}}
ここでは、すべてのリクエストやタスクが有限のプールからスレッドを消費し、高負荷時にパフォーマンスのボトルネックになる可能性がある。
2023年11月にSpringフレームワーク6.1をベースに構築されたSpring Boot 3.2がリリースされ、仮想スレッドを最終化したJava 21の公式サポートが導入された。Java 17がベースラインのJDKであることに変わりはないが、Java 21はフレームワーク内でファーストクラスの実行環境として扱われるようになった。このサポートの重要な側面は、仮想スレッドを有効にするためのシンプルな設定プロパティの提供である:
#application.propertiesspring.threads.virtual.enabled=true.
またはYAML形式である:
#application.ymlspring:threads:virtual:enabled:true
この設定プロパティをセットすることで、アプリケーション全体で仮想スレッドが有効になる。Spring ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access