Linux: 时间片 与 while 长时间占用CPU的问题

时间:2022-02-18 09:20:46
我有一个问题,希望各位老板指教下。

Linux任务调度是通过时间片对吧,就是说每个任务分配一定的时间,时间到就发生任务切换。

这么说,每个任务获得运行的概率应该差不多吧。

那为什么一个线程里这样写,会占用CPU很多呢?

while(1)
{
   //do something
   
   //sleep(1);
}
就是说,如果while(1)中没有sleep或者delay的话,这个任务就会占有绝大多数CPU的运行时间

这是怎么回事,麻烦解释下。

4 个解决方案

#1


需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。

#2


一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu

而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间

#3


引用 1 楼 Idle_Cloud 的回复:
需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。


你的意思,Sleep之后,CPU就不给该任务分配时间片了吗?

#4


引用 2 楼 nevil 的回复:
一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu

而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间


有点理解了

#1


需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。

#2


一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu

而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间

#3


引用 1 楼 Idle_Cloud 的回复:
需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。


你的意思,Sleep之后,CPU就不给该任务分配时间片了吗?

#4


引用 2 楼 nevil 的回复:
一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu

而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间


有点理解了