当我只处理一个进程时,为什么两个 CPU 可以工作?

Why do two CPUs work when I am only working with one process?

我正在 运行 编写一个类似于

的脚本
def test0():
    start = time()
    for i in range(int(1e8)):
        i += 1
    print(time() - start)

当我 运行 在我的机器上使用 CPU 时,我使用 Ubuntu 20.04 系统监视器得到以下 CPU 使用跟踪。

在图像中你可以看到我 运行 两个实验相隔一段时间。但在每个实验中,CPU 中有 2 个的 activity 达到峰值。为什么?

这对我来说似乎很正常。 运行 您的 python 代码的过程至少在默认情况下没有固定到特定的核心。这意味着进程可以在不同的核心之间切换,这就是本例中发生的情况。这些尖峰不是同时发生的,这表明该过程已从一个核心切换到另一个核心。

在 Linux 上,您可以使用

观察这一点
watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p 172810

其中 172810 是 python 进程的 PID(例如,您可以从 top 的输出中获得)

如果要将进程固定到特定核心,可以在代码中使用 psutils

import psutil
p = psutil.Process()
p.cpu_affinity([0])   # pinning the process to cpu 0

现在,您应该只看到一个核心尖峰。 (但如果你没有充分的理由,请避免这样做)。