0

「A」を3回印刷するプログラムがあり、各印刷の間に1秒の遅延があります。このプログラムを1回呼び出すと、2.00秒かかります。

プロセスを0.5秒間実行してから、次のプロセスに切り替えるジョブスケジューラを作成したとします(前のプロセスが再び到達するまで一時停止します)。上記のプログラムを2回開始し、この2つのプロセスでこのジョブスケジューラを実行した場合、合計で4秒かかりませんか?

私はこれをテストしましたが、現時点では、2.5秒で計時されています。誰かがこれを説明できますか?

4

2 に答える 2

3

2つのジョブはおそらく並行して実行されています。これが起こっていることの内訳です:

  1. 時間0-タスク1が開始されました
  2. 時間0.5-タスク2が開始されました[両方実行中]
  3. 時間2.0-タスク1が終了しました[タスク1はすでに1.5秒間実行されました]
  4. 時間2.5-タスク2は、完了するまでさらに0.5秒実行されました。
于 2012-01-12T11:10:48.897 に答える
0

これは、1 秒の遅延を発生させるために使用されるメカニズムに完全に依存します。

ジョブが中断されても時を刻み続ける実際のクロックを使用している場合、そのような 2 つのジョブをタイム スライスするのに 1 つを実行するよりも 2 倍の時間がかかると考える理由はありません。実際、説明したように 2 つのジョブを実行すると、2 秒強かかるはずです。2.5 秒と表示されている理由は、おそらく、スケジューラの粒度が 0.5 秒であるためです。

一方、遅延が所定の数の CPU サイクルのスピンによって影響を受ける場合、実行時間は実際に加算されます。delayただし、汎用 CPU 用に設計されたまともなルーチンは、この方法で実装されません。

于 2012-01-12T11:08:54.347 に答える