マルチプロセッサ マシン上の Windows では、スレッドはその存続期間中に CPU/コアを変更しますか?
3 に答える
はい、デフォルトでは、利用可能な任意のコアでスレッドをスケジュールできます。スレッドを特定のコアに制限する場合は、スレッド アフィニティを設定できます。
スレッドはその存続期間中に CPU/コアを変更しますか?
できる。必ずしも変更されるわけではありませんが、オペレーティング システムがコア間でスレッドを移動することを妨げるものは何もありません。
Windows API は、スレッドの操作を制御する必要がある場合、SetThreadIdealProcessorまたは SetThreadAffinityMaskおよびSetProcessAffinityMaskを介してこれをある程度制御します。
スレッドの寿命が長く、多くのブロッキング呼び出しがある場合。プール スレッドまたはアプリ ライフタイム スレッドの場合、多くの異なるコアで実行されることはほぼ確実です。準備が整うと、OS は空きコアがあればそれをディスパッチします。新しく準備ができたスレッドを実行できるようにするためのコア。
スレッドの存続期間が短く、CPU を集中的に使用する場合でも、準備が整い、後で別のコアにディスパッチされる可能性のある優先度の高いスレッドによって、ある段階でプリエンプトされないという保証はありません。
必要に応じて、優先順位とスレッド アフィニティをいじります。これを行うことで全体的なパフォーマンスの向上を示す数値を生成できた場合は、お知らせください:)