マシンに2つのプロセッサーがあるとします。スレッドAはP1上で実行され、スレッドBはP2上で実行されています。スレッドAが再び実行を開始するとき、それはP2で実行されていることをスレッドとCPUのアフィニティー
スレッドAはSleep(10000);
呼び出すことは可能ですか?
「はい」の場合、誰がこの移行を決定しますか?いいえ、なぜでしょうか?
プロセッサには、実行中のすべてのスレッドまたはOSが各スレッドをプロセッサに完全に存続させるためのデータが格納されますか?
マシンに2つのプロセッサーがあるとします。スレッドAはP1上で実行され、スレッドBはP2上で実行されています。スレッドAが再び実行を開始するとき、それはP2で実行されていることをスレッドとCPUのアフィニティー
スレッドAはSleep(10000);
呼び出すことは可能ですか?
「はい」の場合、誰がこの移行を決定しますか?いいえ、なぜでしょうか?
プロセッサには、実行中のすべてのスレッドまたはOSが各スレッドをプロセッサに完全に存続させるためのデータが格納されますか?
可能です。これは、オペレーティングシステムプロセススケジューラによって決定され、実行中のアプリケーションに依存することもあります。以前実行していたスレッドに関する情報は、キャッシュにあるものを除いて、プロセッサによって保持されません。
これは多くのことに依存しますが、オペレーティングシステムによって異なります。参照:Processor AffinityおよびScheduling Algorithms。 Windowsでは、タスクマネージャを使用して特定のプロセスをプロセッサコアに固定することができます。
はい、可能です。最終的にスレッドはプロセス(実行可能ファイル)からCPU(またはCPUコア)を継承しますが、オペレーティングシステムでは、プロセスが現在のクォンタ(タイムスライス)のために実行するCPUコアまたはCPUコアは、スケジューラによって決定されます。
-Oisin OSは、上のスレッドを実行するプロセッサを決定し、それが容易に睡眠に起因するコンテキスト・スイッチ()がある場合は特に、そのスレッドの寿命の間に変化してもよいです。システムがロードされて、両方のスレッドが同じプロセッサ(またはコア)上で異なる時間に実行される場合は、完全に可能です。また、システムに負荷がかからない場合は、両方のスレッドが別々のプロセッサー上で実行され続けることがあります。