私の職場には、ジョブを実行する共有の強力な 24 コア サーバーがあります。マルチコア CPU の能力を最大限に活用するために、各コアで 24 のスレッドが同時に実行されるように、長時間実行プログラムのマルチスレッド バージョンを作成しました (threading
ライブラリを介してJython
)。
他のジョブが実行されていない場合、プログラムは迅速に実行されます。ただし、1 つのコアで同時に大きなジョブを実行していたため、その特定のコアで実行されているスレッドに時間がかかり、プログラム全体の速度が低下しました (スレッドが最後にデータを結合する必要があるため)。ただし、他のCPUのスレッドは長い間実行を終了していたため、基本的に23コアがアイドル状態で、1コアがスレッドと重いジョブを実行していました。少なくともこれが私の診断です。これは、コマンドの出力を調べることでさらに確認されましたtime
。sys 時間は、ユーザー時間と比較して非常に短かった (つまり、多くの待機があったことを意味します)。
オペレーティング システム (Linux
この場合) は、1 つの CPU がロードされ、他の CPU がアイドル状態の場合、ジョブを別の CPU に切り替えませんか? そうでない場合、私のプログラムでそれを行うことはできますか (でJython
)。時々さまざまな CPU 負荷を照会してから、比較的空いている負荷に切り替えることは難しくありません。
ありがとう。