Linux下CPU时间片,CPU使用率分析,while和sleep分析 | 码农家园 (codenong.com)
CPU的使用率可以理解为每个时间片被充分利用的综合程度。假设时间片为100ms,那么在1s之内会有10个时间片被分配到不同线程(假设不考虑上下文切换的时间),如果有8个线程执行了100ms还没结束,有2个线程执行了10ms就结束了,那么CPU使用率大致为 (8*100 + 2 * 20)/ 1000 = 84%
再比如4个50ms,6个60ms,那么使用率为 (4*50 + 6*60)/ 1000 = 56%
再看下面几个程序,本机上其他程序消耗CPU几乎为0.
1、CPU瞬间100%
因为当前进程的每个时间片都被充分利用了,并且每次又重新回到队列。
1 2 3 | while(true){
}; |
2、CPU占用率0%
sleep调用将会使当前进程处于未就绪状态,也就不在Task Queue里面,直到睡眠时间到,将会放回到队列尾部,可能的表现就是:执行5ms,睡眠1s。。。这样一来它几乎没怎么占用CPU。
1 2 3 | while(true){ sleep(1); }; |