[英]Why single python process's cpu usage can be more than 100 percent?
由于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)
这与Python解释器使用高达130%的CPU的问题不同。 怎么可能? 。 在那个问题中,OP表示他正在进行I / O密集型负载测试 ,这可能会释放GIL。 但在我的程序中,没有I / O操作。
测试在CPython 2.6.6上运行。
一个原因可能是您使用的方法达到950%。 有一个称为(avg)加载的数字可能不是人们在阅读文档之前所期望的。
负载是处于运行或可运行状态(队列中的CPU时间)的线程(平均)数。 如果您在示例中有十个繁忙的循环线程,而一个线程正在运行,则另外九个处于可运行状态(在队列中为一个时隙)。
负载表示您可以使用多少个核心。 或者程序想要使用多少CPU功率(不一定是它可以使用的实际CPU功率)。
我认为在这种情况下,CPU正在忙于进行线程切换而不是做一些实际的工作。 换句话说,线程切换使用所有CPU来完成它的工作,但是python循环代码运行得太快而不能导致可观察的CPU使用率。 我尝试添加一些实际的计算如下,CPU使用率下降到200%左右。 如果你添加更多的计算,我相信CPU的使用率将非常接近100%。
def f():
x=1
while 1:
y=x*2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.