Python 死循环为什么能跑满 CPU?求解

def dead_loop():
    while True:
        pass

dead_loop()

20171013150785976921302.png
在双核的 macbook pro 上,活动监视器显示跑满 cpu。 不应该只能利用单核达到 50%么


Python 死循环为什么能跑满 CPU?求解

17 回复

这应该就是单核的比例


因为Python的GIL(全局解释器锁)在单线程死循环中无法释放。

死循环代码会持续占用CPU时间片,而GIL阻止了其他线程执行,导致操作系统调度器将CPU资源全部分配给这个线程。即使有IO操作,在纯计算循环中GIL也不会主动释放。

简单说就是:单线程死循环+GIL=CPU跑满。

建议:避免写无限循环的业务代码。

天啦,我的程序可以跑 400%

显然是单核的比例,我这儿 top 经常 400%

好像就是这样的。我看了一下是逻辑 cpu 是 4 核,开 4 个程序就 400%

哎,其实还好

Unix 衍生系统的负载:1=一个核满载。。
我的路由器平均负载都是 1.x 也就是 100+%

activity monitor 中的 100%是单核的比例 再开一个 python 跑 while true 就是将近 200%了

楼上真像,不然 monitor 里面加起来超过 100%了

也不全是,安卓日常 20+

这个占用跑到 100 多都有的,得看下面那个占用。

所有语言的死循环都可以跑满 cpu,循环就是消耗计算,靠 cpu 完成的

谁贴一个纯 CPython 代码跑满所有 CPU 的我给他加分!



import multiprocessing as mp
from concurrent.futures import ProcessPoolExecutor

def fn():
while 1:
pass

with ProcessPoolExecutor() as executor:
for i in range(mp.cpu_count()):
executor.submit(fn)





对齐我懒得弄了。

不错。不过单进程能实现不 (滑稽脸)



这很无聊额。

回到顶部