15/16!原文はこちら。University).http://belaban.blogspot.com/2020/07/double-your-performance-virtual-threads.htmlトランスポートにUDPをお使いで、そのパフォーマンスを倍増させたい場合には是非お読みください。thread、以前はfiberと呼ばれていました)がもたらすものに興味関心をお持ちの方がいらっしゃるかもしれません。Threads)のコンセプトに近いものです。カーネルではなく、JVMがこの軽量スレッドを管理します。多くの仮想スレッドは同じOSネイティブ(キャリア)スレッド(もちろん1度に1個だけです)にマッピングできるため、数百万もの仮想スレッドを持つことができます。仮想スレッドは継続(continuation)を使って実装されていますが、それは枝葉の部分です。重要なのは、(LockSupport.park()などの)JDKでの全てのブロッキング呼び出しが、ブロックせずにyield(明け渡す)ように変更された、という点です。state)に移行する、ということです。ブロックが終わると、スレッドはRUNNABLEとして再度マークされるだけで、スケジューラは引き続き中断した箇所からcontinuation(継続)を続けます。主な利点は以下の通りです。ブロッキング呼び出しを(例えばリアクティブ呼び出しに)変更する必要はありませんスレッドプールは不要です。仮想スレッドを作るだけでOKです(ブロッキング呼び出しの削減および廃止により)コンテキストスイッチが減ります数多くの仮想スレッドを持つことができます仮想スレッドがJDKで使えるようになるまでには少々時間がかかりますが、JGroupsではすでにこのサポートを追加しています。"true"と指定するだけで利用できます。JVMが仮想スレッドをサポートするようになれば仮想スレッドを使います。サポートされていないJVMの場合はフォールバックして、通常のネイティブスレッドを使います。利点をもたらしますが、その他のパフォーマンスの向上は、より新しいJDKを試すことで得ることができます。15から、DatagramSocketsとMulticastSocketsの実装は、DatagramChannelsとMulticastChannelsに委譲するように変更されました。仮想スレッドもサポートされます。APIhttp://openjdk.java.net/jeps/373これにより、DatagramChannelsとMulticastChannelsを使うUDPのパフォーマンスが向上します。ネットワークのコード改善と仮想スレッドの組み合わせは、以下のような、UDPの驚くべき結果をもたらします。Ethernet)8個で構成されるクラスタで、UPerfを使ってテストしました。16-ea5はネイティブスレッド、16-loom+2-14は仮想スレッドを使っています。16-ea5では81,402と82%も向上しました。仮想スレッドを有効にすると、16-loom+2-14では88,252と、16-ea5からさらに8%も向上しています。11と16-loomの間では、97%ものパフォーマンスの差が出ました。TCPのパフォーマンスの差はごくわずかです。11で既に最適化されていたからだと思われます。同等になっていることがわかります。実際のところ、UDPはTCPよりも3%速いのです。この変更を含んだ45.0.0/Finalをまもなくリリースするので、それをお待ちください。リリースする予定です。ブランチに変更をバックポートするかどうかはわかりませんけど。コメントをキャンセルコメントを入力してください。以下に詳細を記入するか、アイコンをクリックしてログインしてください。アカウントを使ってコメントしています。アカウントを使ってコメントしています。新しいコメントがついたらメールで通知。Inside現在40人フォロワーがいます。購読管理このバーを折りたたむ%d人のブロガーが「いいね」をつけました。