今天在跑程序的时候,用top看了一下,发现了如下
是的,大家看到,CPU占用超过了100%,当时我是懵的,为什么能超过100%。这好像无法用学习到的进程,线程,与CPU的相关知识解释。
然后,因为是跑的python脚步,所以为特意用两个简单脚本测试一下。
这是一个简单的循环脚本,看看能不能复现问题。
测试结果一然后经过了10多分钟观察,并不会出现超过100%。
毫无头绪。。。
然后想了半天,会不会是top的CPU百分比不是所有相加等于100的呢,会不会是为的曲解呢。
然后查阅top命令相关资料,发现原因:原来top命令默认是不显示多个CPU的状态的,输入top命令后按1,才能显示各个CPU的状态,如图。
这样的话,我就理解为什么会可以一个进程超过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%。
谜底揭开,谢谢阅读。
噔噔噔,复现了。
可以看到其实各个CPU都没有超过100%占用,对应的python进程却超过了100%,因为单位时间每个CPU都有一部分抢占到了该python脚本的各自线程,导致总体相加CPU占用超过了100%。
谜底揭开,谢谢阅读。