Java プログラムを書きました。小さな入力の場合、ウォームアップ (最初の 50 回の実行) 後、その実行時間は約 2 ミリ秒になります。
この場合、複数のスレッド バージョンを使用すると、何かメリットがありますか? そうでない場合、並列実行の利点を隠しているオーバーヘッドは何ですか?
Java プログラムを書きました。小さな入力の場合、ウォームアップ (最初の 50 回の実行) 後、その実行時間は約 2 ミリ秒になります。
この場合、複数のスレッド バージョンを使用すると、何かメリットがありますか? そうでない場合、並列実行の利点を隠しているオーバーヘッドは何ですか?
ほとんどの場合、スレッドを開始するオーバーヘッドは、スピードアップをはるかに上回ります。Windows では、このような高速なプログラムの実行時間を確実に測定することさえ困難です。
しかしもちろん、2 ミリ秒で実行されるプログラムの高速化が本当に必要かどうかを自問する必要があります。
2ms は、少なくとも複数のスレッドに分割する候補です。継続的にスレッドを作成/実行/終了/結合することは、スターターではなく、絶望的な設計です。一連の専用スレッドに作業を通知したり、プールに作業を発行したりする場合、すべては完了した作業とデータ編成に依存します。
これらの 2 ミリ秒で効果的に並行して実行できるブロッキング、または CPU を集中的に使用する作業がある場合は、試してみることができます。CPU を集中的に使用する作業の主な問題は、データの量とその整理方法です。処理するデータを [L1 キャッシュ サイズ以下] のチャンクに簡単に切り刻むことができれば、勝者です。そうでない場合は、失望に備えてください。
もちろん、試して見ることもできます..
Id は、2ms が遅すぎるかどうかによって異なります。また、タスクを同時に実行するかどうかによっても異なります。Executor を使用してタスクを実行しない理由は、必要に応じてスレッドを追加できるからです。