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上运行.
原因之一可能是您用于达到 950% 的方法。有一个称为(平均)负载的数字,这可能不是人们在阅读文档之前所期望的。
负载是处于运行或可运行状态(在 CPU 时间队列中)的线程(平均)数量。在您的示例中,有十个繁忙的线程循环。当一个线程正在运行时,其他九个线程处于可运行状态(在队列中等待一个时隙)。
负载指示您可以使用多少个核心。或者您的程序想要使用多少 CPU 能力(不一定是它实际使用的 CPU 能力)。
| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |