首页 > 编程知识 正文

top命令显示cpu使用率超过100,topcpu一直是100%

时间:2023-05-04 23:28:04 阅读:268282 作者:3460

top现象

今天在跑程序的时候,用top看了一下,发现了如下

是的,大家看到,CPU占用超过了100%,当时我是懵的,为什么能超过100%。这好像无法用学习到的进程,线程,与CPU的相关知识解释。
然后,因为是跑的python脚步,所以为特意用两个简单脚本测试一下。

测试脚本一 if __name__=='__main__': while True: pass

这是一个简单的循环脚本,看看能不能复现问题。

测试结果一

然后经过了10多分钟观察,并不会出现超过100%。
毫无头绪。。。
然后想了半天,会不会是top的CPU百分比不是所有相加等于100的呢,会不会是为的曲解呢。
然后查阅top命令相关资料,发现原因:原来top命令默认是不显示多个CPU的状态的,输入top命令后按1,才能显示各个CPU的状态,如图。

top + 1 状态图

这样的话,我就理解为什么会可以一个进程超过100%CPU占用了,因为python脚本只能同时有一个线程运行(GIL全局解释锁的缘故),所以多线程时,多个CPU轮流抢占,就造成多个CPU占用超过了100%,而单线程的时候,虽然都是随机CPU调度,但是没有那么多抢占。(这个与单位时间计算用户空间CPU占用以及python多线程有关,在这里不做拓展)

测试脚本二

用一个多线程脚本测试测试。

import threadingdef th01(): while True: passdef multi_th(): th1=threading.Thread(target=th01) th1.start() th2=threading.Thread(target=th01) th2.start() th01()if __name__=='__main__': multi_th() 测试结果二


噔噔噔,复现了。

结论

可以看到其实各个CPU都没有超过100%占用,对应的python进程却超过了100%,因为单位时间每个CPU都有一部分抢占到了该python脚本的各自线程,导致总体相加CPU占用超过了100%
谜底揭开,谢谢阅读。

2分快三计划(): while True: passdef multi_th(): th1=threading.Thread(target=th01) th1.start() th2=threading.Thread(target=th01) th2.start() th01()if __name__=='__main__': multi_th() 测试结果二


噔噔噔,复现了。

结论

可以看到其实各个CPU都没有超过100%占用,对应的python进程却超过了100%,因为单位时间每个CPU都有一部分抢占到了该python脚本的各自线程,导致总体相加CPU占用超过了100%
谜底揭开,谢谢阅读。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。