Java 21 では、革新的な 仮想スレッド が導入されました!この機能が何であるか、従来のモデルとの違い、そしてその長所と短所を詳しく見てみましょう。
以前のバージョンの Java では、スレッドを作成するということは、リソースが限られているオペレーティング システム (OS) スレッドにスレッドを直接結び付けることを意味していました。多くの場合、多数の OS スレッドをスピンアップすると、パフォーマンスのボトルネックやメモリ使用量の増加が発生します。 Java 21 では、仮想スレッド (別名 Project Loom) は、OS スレッドから切り離された軽量で管理しやすいスレッドを提供することで、この問題を解決することを目指しています。
?簡単に言うと、仮想スレッドは、システム リソースを占有することなく、何千もの同時タスクをより効率的に処理できるマイクロサイズのスレッドと考えてください。
「プラットフォーム スレッド」に基づく Java の古いスレッド モデルでは、各 Java スレッドが OS スレッドに 1 対 1 でマッピングされる必要がありました。それは信頼できる一方で、次のことも意味します
メモリの制限: プラットフォームのスレッドは大量のメモリを消費します。
スケーリングの問題: 多数のスレッドを管理すると、システム リソースが過負荷になる可能性があります。
I/O のブロックの問題: I/O を待機している OS スレッドが他の操作をブロックし、パフォーマンスが低下しました。
仮想スレッドに参加してください! ?♂️
仮想スレッドを使用すると、リソースに負担をかけずに数百万のスレッドを作成できます。これらは OS スレッドにバインドされていないため、仮想スレッドがブロックされている場合 (I/O の待機中など)、基盤となるキャリア スレッドは別の仮想スレッドを選択して、スムーズな動作を維持できます。
TRADITIONAL THREADS VIRTUAL THREADS --------------------------------- --------------------------------- | Java Thread -> OS Thread -> Task | | Virtual Thread -> Carrier OS Thread | | Java Thread -> OS Thread -> Task | -> | Virtual Thread -> Carrier OS Thread | | Java Thread -> OS Thread -> Task | | Virtual Thread -> Carrier OS Thread | --------------------------------- ---------------------------------
仮想スレッドでは、複数の仮想スレッドを 1 つの OS スレッドに割り当て、リソース割り当てを最適化できます。
長所
高いスケーラビリティ: 数百万のスレッドを処理できるため、サーバーサイド アプリケーションに最適です。
メモリ使用量の削減: 仮想スレッドは軽量であるため、それぞれが完全な OS スレッドを必要としません。
効率的なブロッキング I/O: 仮想スレッドがブロッキング I/O に遭遇した場合、キャリア スレッドは他のタスクを取得し、システムをアクティブに保つことができます。
リソース管理の改善: スレッドが OS スレッドの限られたプールに制限されなくなり、無駄なリソースが減りました。
短所
学習曲線: 仮想スレッドには新しい同時実行の概念が導入されており、既存のスレッド管理手法の再考が必要になる場合があります。
新しいデバッグの課題: 数千 (または数百万) の仮想スレッドのデバッグは、より複雑になる可能性があります。
すべてのアプリケーションに最適なわけではありません: シングルスレッド アプリケーションや同時実行性が最小限のアプリケーションでは、仮想スレッドのメリットはあまりありません。
従来のスレッドの簡単な例を見て、仮想スレッドと比較してみましょう。
従来のスレッド
TRADITIONAL THREADS VIRTUAL THREADS --------------------------------- --------------------------------- | Java Thread -> OS Thread -> Task | | Virtual Thread -> Carrier OS Thread | | Java Thread -> OS Thread -> Task | -> | Virtual Thread -> Carrier OS Thread | | Java Thread -> OS Thread -> Task | | Virtual Thread -> Carrier OS Thread | --------------------------------- ---------------------------------
仮想スレッド (Java 21)
仮想スレッドは Java 仮想マシン (JVM) によって独立して管理され、OS スレッドに限定されません。
public class TraditionalThreadExample { public static void main(String[] args) { Thread thread = new Thread(() -> System.out.println("Hello from a traditional thread!")); thread.start(); } }
プラットフォームと仮想スレッドを使用して 100,000 のタスクを実行するサンプル例。
public class VirtualThreadExample { public static void main(String[] args) { Thread.startVirtualThread(() -> System.out.println("Hello from a virtual thread!")); } }
結論: 同時実行の未来はここにありますか?
Java 21 での仮想スレッドの導入により、同時タスクの管理がこれまでより効率的で、スケーラブルで、軽量になりました。数百または数百万のタスクを処理するかどうかに関係なく、仮想スレッドは、よりシンプルでリソースに優しい Java プログラミング方法への道を提供します。
以上がJava 仮想スレッド: 同時実行性に革命をもたらします!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。