「A」を3回印刷するプログラムがあり、各印刷の間に1秒の遅延があります。このプログラムを1回呼び出すと、2.00秒かかります。
プロセスを0.5秒間実行してから、次のプロセスに切り替えるジョブスケジューラを作成したとします(前のプロセスが再び到達するまで一時停止します)。上記のプログラムを2回開始し、この2つのプロセスでこのジョブスケジューラを実行した場合、合計で4秒かかりませんか?
私はこれをテストしましたが、現時点では、2.5秒で計時されています。誰かがこれを説明できますか?
「A」を3回印刷するプログラムがあり、各印刷の間に1秒の遅延があります。このプログラムを1回呼び出すと、2.00秒かかります。
プロセスを0.5秒間実行してから、次のプロセスに切り替えるジョブスケジューラを作成したとします(前のプロセスが再び到達するまで一時停止します)。上記のプログラムを2回開始し、この2つのプロセスでこのジョブスケジューラを実行した場合、合計で4秒かかりませんか?
私はこれをテストしましたが、現時点では、2.5秒で計時されています。誰かがこれを説明できますか?
2つのジョブはおそらく並行して実行されています。これが起こっていることの内訳です:
これは、1 秒の遅延を発生させるために使用されるメカニズムに完全に依存します。
ジョブが中断されても時を刻み続ける実際のクロックを使用している場合、そのような 2 つのジョブをタイム スライスするのに 1 つを実行するよりも 2 倍の時間がかかると考える理由はありません。実際、説明したように 2 つのジョブを実行すると、2 秒強かかるはずです。2.5 秒と表示されている理由は、おそらく、スケジューラの粒度が 0.5 秒であるためです。
一方、遅延が所定の数の CPU サイクルのスピンによって影響を受ける場合、実行時間は実際に加算されます。delay
ただし、汎用 CPU 用に設計されたまともなルーチンは、この方法で実装されません。