4

私はJava の fork-join フレームワークを使用して、CPU を集中的に使用する計算を処理しています。

「シーケンシャルしきい値」(サブタスクを作成するか、作業を実行するかを決定するために使用)を少し調整しましたが、残念なことに、シングルスレッドから 4 + 4 コアに移行しても、全体的なパフォーマンスは約 2 倍になります。プールは 8 個の CPU を報告し、手動で 2、3、4 を設定すると、パフォーマンスが徐々に向上しますが、それでもシングル スレッド スループット全体の約 2 倍に達します。また、Linux システム アクティビティ モニタは、その Java プロセスの約 50% を維持します。

また、非常に疑わしいのは、複数の Java プロセスを開始すると、全体のスループットがより一致し (単一のスレッドよりもほぼ 4 倍高速)、システム アクティビティ モニターの CPU 使用率が高くなるという事実です。

Java、Linux、または fork/join フレームワークのいずれかに、CPU のフル使用を禁止する制限がある可能性はありますか? 提案や同様の経験はありますか?

注意。これは、Linux Mint ボックスで Oracle Java 7r13 を実行する、4 つのコアと 4 つのハイパースレッド コアを備えた Intel 3770 CPU 上にあります。

4

1 に答える 1

1

皆さん、考えと答えをありがとう!あなたの提案から、問題はフレームワーク自体ではないと結論付け、さらにテストを続けたところ、数分後に CPU 負荷が 15% に低下したことがわかりました。

Random (私が頻繁に使用する) は、マルチスレッド設定ではパフォーマンスが低いことがわかりました。解決策は、代わりに ThreadLocalRandom.current().nextXXX() を使用することでした。現在、一貫して 80% の使用率に達しています (まだいくつかの連続したパッセージが残っています)。甘い!

私を正しい軌道に乗せてくれてありがとう。

于 2013-03-15T11:35:39.457 に答える