两个 CPU 进程在什么时候会相互干扰?

Win*_*ade 5 cpu windows-7 cpu-usage process

我同时在我的 CPU 上运行多个进程,现在我试图找出每个进程可以使用多少 CPU 功率,直到它们开始相互干扰:

为简单起见,让我们假设一台机器只有一个 CPU,并假设 CPU 是唯一相关的资源。

我们现在有两个不同的进程以相同的 CPU 优先级在 Windows 7 64 位机器上的单个 CPU 上运行。我们会打电话给他们P1P2。二者P1P2用20%的每个CPU的。

  1. 如果各自的另一个没有运行,它们会以相同的方式运行吗?
    从逻辑上讲,他们会这样做,因为有足够的 CPU 能力来运行它们。但是由于CPU的共享,实际情况可能会有所不同。

  2. 如果 1. 的答案是肯定的:他们将在什么时候开始相互干扰?
    只有当它们都尝试使用超过 50% 的 CPU 总功率时,它们才会开始相互干扰,还是会因为任何原因更早地进行干扰?

  3. 如果有 2 个以上的进程或不同类型的进程(例如每个进程有多个线程),前面问题的答案是否会有所不同,它们会有什么不同?

小智 7

忽略其他进程的开销(您标记了 Windows 7)。内核将按照每个线程准备就绪的顺序对它们进行排队。还有更多内容,但这是一般要点。

每个程序都会做很多事情,比如对磁盘或内存进行读取或写入,每一个都是它自己的任务。如果每个进程只使用 20% 的 CPU;P1将运行一项任务,然后P2将运行一项。如果P2在第二轮中首先准备好P2将运行一个,然后是P1。这将一直持续到每个完成并退出。

现在 100% 的进程利用率意味着每个测量的时间,(在这个例子中是 1 秒),所以处理器每秒都在忙碌,它总是在计算。在您每秒使用 40% 的示例中,处理器正在工作,进行 400 毫秒的计算。因此,在 10 秒后,处理器总共处于待机状态 6 秒。(忽略其他程序,并在头上)

  1. 是的。如果你一次只运行一个,来回切换的开销将不适用,但如果处理器只有 40%,这不是真正的问题。

  2. 如果每个程序都需要 100% 的处理器,那么您会注意到来回切换会有一些延迟时间。请记住,单个内核一次只能做一件事,它似乎做得更多,因为它来回切换的速度非常快。每个 50% 加上大约 0.01% 的开销意味着 100.01%,因此您将“等待”10 毫秒。

  3. 是的,在介绍中,每个程序都有许多任务,程序必须执行的每个任务(读取,然后写入)的多个线程会更快地进入队列,因此“等待”时间会更少,您会能够将 40% 的 CPU 使用率打包到前 400 毫秒中,而不必包括等待时间,迫使工作分散到 600 毫秒之类的时间。更多的程序实际上是一样的,每个程序都有更多的开销,但它仍然可以忽略不计。(除非你进入实时系统。)

同样,这是超级通用的,但它或多或少是多个程序共享单个 CPU 的方式。当逻辑/程序/调度器对任务队列排序不好时就会出现问题,这会导致更多的开销,开销越大等待时间越长,因此即使您的程序每个只需要40%,切换的开销也会导致30%更多时间切换任务或等待。