0

我有一个程序打印出 'A' 3 次,每次打印之间有 1 秒的延迟。调用这个程序一次需要 2.00 秒。

想象一下,我创建了一个作业调度程序,它执行一个进程 0.5 秒,然后切换到下一个进程(暂时暂停前一个进程,直到它再次到达它)。如果我启动上面提到的程序两次并在这两个进程上运行这个作业调度程序,总共不会需要 4 秒吗?

我已经对此进行了测试,但目前它的计时时间为 2.5 秒。谁能解释一下?

4

2 回答 2

3

这两个作业可能是并行运行的。这是正在发生的事情的分解:

  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

这完全取决于用于实现一秒延迟的机制。

如果它使用的实际时钟即使在作业暂停时也会继续滴答作响,那么就没有理由认为对两个这样的作业进行时间切片的时间应该是运行一个作业的两倍。事实上,像你描述的那样运行两个作业应该只需要两秒钟多一点。您看到 2.5s 的原因可能是因为您的调度程序的粒度是 0.5s。

另一方面,如果延迟是通过旋转预定数量的 CPU 周期来实现的,那么执行时间确实会增加。但是,不会delay以这种方式实现为通用 CPU 设计的合理例程。

于 2012-01-12T11:08:54.347 回答