繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM