1

スレッドは、開始されると、終了するまで常に同じCPUで実行されますか?それともOS/実装に依存しますか?

私はこれを好奇心から求めています。

4

2 に答える 2

2

OSに依存しますが、スレッドが使用したデータはそのコアにキャッシュされる可能性が高く、パフォーマンスが向上するため、一般的にOSは同じコアでスレッドを実行しようとします。

それはすべて、スレッドシェダリングの仕組みに基づいています。

于 2013-02-20T12:40:45.833 に答える
2

一般的に、マルチコアボックスではありません。同じコアを使用できる場合、他の人が投稿したように、L1キャッシュに残っているデータを利用することで得られる利点があるかもしれませんが、コアアフィニティを明示的に強制することの欠点は悪いです。

スレッドXが作成され、コア0にバインドされます。スレッドXが実行されます。I / Oまたはスレッド間通信のために、システムコールのスレッドXブロック。OSはコア0でスレッドYを実行します。コア1、2、および3がアイドル状態のときにスレッドXの準備が整います。

それで?

スレッドYを不必要にプリエンプトしますか?Yの移動のオーバーヘッドに加えて、Yもコア0にバインドされている場合はどうなりますか?YがブロックするまでXを再度ブロックしますか?可能な場合にXが進行するのを防ぎます。

于 2013-02-20T13:42:12.070 に答える