空循环占用cpu100%

程斌 2019-08-21 AM 878℃ 0条

cpu.png

while true do
end

最近在学习openresty,看案例代码过程中,看到一个死循环监听命令行的逻辑;
所以巧合的拿出循环代码(其中不放置任何的业务代码),然后执行。
看到的效果是 cpu瞬间占用100%

为什么占用cpu这么高?

一个进程如果是死循环,那么占有的CPU会很高,可以操作系统时间片运行的,到了一定时间不是会自动切换到别的进程吗?既然即便是死循环,到时间还是会切换到别的进程,为什么占用CPU会高呢?
解答:CPU的确会切换到别的进程。可以这样理解:当切换到别的进程时,别的进程告诉系统自己没什么事情要做,不需要那么多的时间,这个时候系统就会切换到下一个进程,直到回到这个死循环的进程上,而这个进程无论什么时候都再循环,所以一直会报告有事情要做,系统就会把尽可能多的时间分给他——实际上是这个死循环任务用光了别的进程节省下来的时间。

改进方式

while true do
ngx.sleep(0.1)
end

更详细:为什么空循环进程会导致CPU占有率很高

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~