以前当我运行 Folding@Home 客户端时,现在当我使用 BOINC 时,它们总是使用“空闲”CPU 时间(对于那些不熟悉这些程序的人来说,它们会在您的计算机上运行大量的科学计算,因此非常耗时)。然而,我注意到在 Windows 和 Linux 上尝试做其他事情(Firefox、在 Netbeans 中编程等)时,所有这些程序都非常慢。
现在我知道您可以执行诸如仅在 2 个或 3 个核心上运行客户端(假设是 4 核系统)之类的操作,但我更感兴趣的是为什么这个“空闲” CPU 时间会导致具有正常优先级的程序变慢。具有正常优先级的进程难道不会先于具有空闲优先级的进程运行,并在必要时中断它吗?为什么操作系统很难管理这一点?
答案1
这些程序实际上并不是在“空闲” CPU 时间内运行的,而是作为低优先级进程运行的。当操作系统运行多个应用程序时,它会使用进程调度程序来确定哪些进程可以访问 CPU 以及访问频率。这称为抢占式多任务处理。
调度程序使用进程优先级来确定哪些进程可以访问 CPU。在调度程序中,普通优先级进程的优先级高于空闲优先级进程,但 CPU 仍在使用中,并且线程和进程之间的上下文切换会产生一些开销。
因为 CPU 现在一直以 100% 的速度运行,而不是有空闲周期,所以不难想象,由于线程切换开销,某些进程和中断可能比 CPU 空闲时花费更长的时间。
其中一些程序有一个选项,可以在计算机使用时停止运行其进程。它们通过检测鼠标或键盘活动来实现这一点,并在一段时间内禁用自身,直到计算机再次处于空闲状态,此时它们将重新启动。我建议查看该选项。
另外需要指出的是,CPU 空闲时消耗的电量比满负荷时少得多。因此,当您的程序使用“空闲”的 CPU 周期时,它们很容易使您的 PC 功耗翻倍,每月花费您几美元的电费。
答案2
我只需要在克里斯汤普森的回答中添加一些小内容,他已经说完了主要部分。
电力消耗和对电费的影响确实可能很大,我再强调一下。其他程序可能受到额外低优先级线程影响的原因可能是在更改进程时需要额外的工作(现在实际上正在使用缓存和寄存器)。而且 I/O 操作也确实会产生一些影响。这些程序的大部分工作仅是 CPU 密集型的,这可能会受到进程优先级的影响,但额外的 I/O 很难确定优先级。而且额外的内存使用也会降低系统速度。如果您的内存已满,则交换可能会显著降低系统性能。
详细说明功耗:我发现 Intel Core i7 Extreme Edition 在重负载下的实际功耗约为 300 瓦以上。较新的 Intel Core 处理器有一些非常好的省电功能,甚至允许 CPU 在空闲时切断不同内核的电源。因此,我认为如果您一直运行此类程序,则可能会多使用 150 到 200 瓦。(我发现的旧数字显示 150+ 瓦的差异)但由于我找不到可靠的数字,我们假设您多使用了 100 瓦(别忘了,如果您的 CPU 产生更多热量,您的冷却系统也必须工作更多) - 如果您的 PC 全天候运行,则每月 100*24*30 = 72 千瓦时或每年 864 千瓦时。