スレッドは、開始されると、終了するまで常に同じCPUで実行されますか?それともOS/実装に依存しますか?
私はこれを好奇心から求めています。
OSに依存しますが、スレッドが使用したデータはそのコアにキャッシュされる可能性が高く、パフォーマンスが向上するため、一般的にOSは同じコアでスレッドを実行しようとします。
それはすべて、スレッドシェダリングの仕組みに基づいています。
一般的に、マルチコアボックスではありません。同じコアを使用できる場合、他の人が投稿したように、L1キャッシュに残っているデータを利用することで得られる利点があるかもしれませんが、コアアフィニティを明示的に強制することの欠点は悪いです。
スレッドXが作成され、コア0にバインドされます。スレッドXが実行されます。I / Oまたはスレッド間通信のために、システムコールのスレッドXブロック。OSはコア0でスレッドYを実行します。コア1、2、および3がアイドル状態のときにスレッドXの準備が整います。
それで?
スレッドYを不必要にプリエンプトしますか?Yの移動のオーバーヘッドに加えて、Yもコア0にバインドされている場合はどうなりますか?YがブロックするまでXを再度ブロックしますか?可能な場合にXが進行するのを防ぎます。