空的死循环为什么会让cpu100%

 while (1) {
  //空代码块
 }

      上面这个代码相信很多人都写过,这个代码的后果就是cpu会100%(具体数值要看cpu核数和操作系统对这个的表示方法,有的2核会显示50%,有的2核会显示100%),如果是单核那么你的电脑会相当卡了。解决这个问题的办法很简单

 while (1) {
     sleep(1);
 }

加上一个sleep(1),让她休眠一秒就好了。现在都是多任务操作系统了,电脑上不会只有这一个进程,cpu不是按时间片轮转来执行吗?就算是单核,cpu利用率也不应该是100%啊,为什么会这样呢?我们知道一个线程有三种状态:

假设现在加上这个  空的死循环线程 有100个线程  ,它们的优先级相同,其它99个线程有空闲的也有不是空闲的。 运行之后,cpu

根据时间片来执行这些线程,每当执行完某个线程的部分代码即将要进入空闲状态时,这个空的死循环会不断的向cpu申请资源,cpu立即去执行这个空的死循环,导致cpu没有空闲的状态,最后会100%   (cpu从一个线程切换到另一个线程,也要消耗cpu)。

打个比方,现在有一个环卫工人,负责打扫5条街,本来是打扫完一条街可以休息10分钟(一条街40分钟内没有垃圾)。但是现在由于第二条街人口剧增,每当环卫工人准备休息的时候,街道办就打电话来说赶紧去打扫第二条街,如此一来环卫工人再也没有休息的时间了。

猜你喜欢

转载自blog.csdn.net/Lonely_Devil/article/details/81118219