Linux任务调度是通过时间片对吧,就是说每个任务分配一定的时间,时间到就发生任务切换。
这么说,每个任务获得运行的概率应该差不多吧。
那为什么一个线程里这样写,会占用CPU很多呢?
while(1)
{
//do something
//sleep(1);
}
就是说,如果while(1)中没有sleep或者delay的话,这个任务就会占有绝大多数CPU的运行时间
这是怎么回事,麻烦解释下。
4 个解决方案
#1
需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。
#2
一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu
而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间
而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间
#3
你的意思,Sleep之后,CPU就不给该任务分配时间片了吗?
#4
有点理解了
#1
需要cpu的大家均分,不需要进程都会很谦让的,都会让出来的,这时候一个流氓进程就抢到了很多啊。
#2
一般写的程序因为各种原因都会休眠,比如IO操作,而IO操作常常会导致进程休眠。所以一般进程都不会长期占用cpu
而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间
而死循环这种进程不会休眠,一有机会就占用cpu运行其时间片,所以就会是这种进程占用了大部分cpu时间
#3
你的意思,Sleep之后,CPU就不给该任务分配时间片了吗?
#4
有点理解了