私たちのマルチスレッド Java アプリでは、スレッドごとに LinkedBlockingDeque の個別のインスタンスを使用しています。スレッド (c1、c2、.... c200) を想定しています。
スレッド T1 と T2 はソケットからデータを受信し、c1 から c200 の間の特定のコンシューマーの Q にオブジェクトを追加します。
LinkedBlockingDeque.take() を呼び出す run() 内の無限ループ
負荷実行では、javae.exe 自体の CPU 使用率は 40% です。システム内の他のプロセスを合計すると、全体の CPU 使用率は 90% に達します。
JavaVisualVM を使用することにより、run() はより多くの CPU を使用しており、LinkedBlockingDeque.take() を疑っています。
そのため、thread.wait、notify、thread.sleep(0) などの代替手段を試しましたが、変更はありませんでした。
各コンシューマーが別々の Q を持つ理由は 2 つあります。と検索条件が拡張されます。3.そして、コンシューマにリクエストを処理するための別の Q を持たせる
CPU 使用率を下げようとしていて、入力が必要です...
SD