为什么单个python进程的cpu使用率可以超过100%?

WKP*_*lus 7 python multithreading cpython

由于GIL,我认为多线程python进程一次只能运行一个线程,因此cpu使用率不能超过100%.

但我发现下面的代码可以占用顶部950%的CPU使用率.

import threading
import time

def f():
    while 1:
        pass


for i in range(10):
    t = threading.Thread(target=f)
    t.setDaemon(True)
    t.start()

time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

这与Python解释器使用高达130%的CPU的问题不同.怎么可能?.在那个问题中,OP表示他正在进行I/O密集型负载测试,这可能会释放GIL.但在我的程序中,没有I/O操作.

测试在CPython 2.6.6上运行.

sky*_*ing 1

原因之一可能是您用于达到 950% 的方法。有一个称为(平均)负载的数字,这可能不是人们在阅读文档之前所期望的。

负载是处于运行或可运行状态(在 CPU 时间队列中)的线程(平均)数量。在您的示例中,有十个繁忙的线程循环。当一个线程正在运行时,其他九个线程处于可运行状态(在队列中等待一个时隙)。

负载指示您可以使用多少个核心。或者您的程序想要使用多少 CPU 能力(不一定是它实际使用的 CPU 能力)。