1

SOに関する別の質問から、次の簡単な方法が可能であることがわかりました。

  void B()
  {
    if (_complete)
    {
      Console.WriteLine (_answer);
    }
  }

ifとコンソール書き込みライン呼び出しの間でコンテキストスイッチが発生した場合、異なるCPUで実行される可能性があります。これは私にとってニュースなので、シングルスレッドコードを別のCPUに切り替えることができるのはいつか、上記のような単純なケースでなぜ意味があるのか​​疑問に思います。 ?

4

3 に答える 3

6

シングルスレッドコードが別のCPUに切り替えられるのはいつですか

これはいつでも発生する可能性があります。そうは言っても、実際には、実際には気にしないでください。これは、マルチタスクオペレーティングシステムの機能です。

上記のような単純なケースでなぜそれが理にかなっているのでしょうか?

それはあなたのコードを全く助けません。これにより、オペレーティングシステムは、システムで実行されている他のプロセスのバランスを取り、処理することができます。

于 2011-08-31T16:40:59.287 に答える
4

基本的に、コンテキストスイッチは、OSがスレッドを「フリーズ」することで、別のスレッドがCPU時間を取得できるようにします。最初のスレッドが「解凍」されると、以前に実行されていたCPUで実行を継続する必要はありません。その詳細はOSが決定します。

たとえば、スレッドが解凍されたときに、スレッドが実行されていた前のコアとは異なる未使用の完全なコアがある場合、フリーコアを使用しないのは無駄になります。

于 2011-08-31T16:40:56.613 に答える
0

シングルスレッドコードが別のCPUに切り替えられるのはいつですか

いつでも。

また、CPU/OSはコードを認識しないことを忘れないでください。マシン命令が表示されます。これは、作成するコードとは大きく異なります。マシン命令は通常(常に?)アトミックに実行されますが、プログラムは任意の命令の間に事前設定/再スケジュールできます。

そして、なぜそれが上記のような単純なケースで意味をなすのでしょうか?

コモディティオペレーティングシステムでは、事前のスケジューリングがあり、実行されるコードはプログラムだけではありません。OSは、他のプロセス/スレッド/サービス/割り込みハンドラーを実行させるためにコードを停止する必要がある場合があります。

また、プロセスが再び実行されると、おそらく以前に実行されていたCPUが占有され、別のCPUが自由に使用できるため、OSはそのCPUでプロセスをスケジュールします。

于 2011-08-31T16:50:04.690 に答える