CPU占用率是什么?
這是昨晚上在朋友圈發(fā)的一個討論

回答的問題很多

因為這個問題,我晚上也沒早睡,就想把這個講清楚
說這個問題之前我們先了解下時間片調(diào)度算法,因為用這個來講比較清楚。

CPU可以執(zhí)行任務(wù),CPU給哪個進程執(zhí)行,哪個進程就可以占用CPU去做它想做的事情,如果進程的優(yōu)先級比較低,調(diào)度器每次調(diào)度的時候,就容易被高優(yōu)先級的進程插隊,這個進程實際上占有CPU的時間就會比較短。
什么是CPU是利用率呢?
先說下,這個指的是有操作系統(tǒng)的情況下,有多任務(wù)系統(tǒng),那系統(tǒng)有一個調(diào)度室,調(diào)度室分配給進程的使用CPU時間T1,進程在被調(diào)度時,進程實際占用CPU時間T2,T2/T1就是這個進程的CPU占用率了。
如果我們這樣寫代碼
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d:Cpu start...\n",getpid());
while(1)
{
sleep(1);
}
return 0;
}
這時候的CPU占用率是

如果我們代碼修改成這樣
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0;
printf("%d:Cpu start...\n",getpid());
while(1)
{
for(i=0;i<100000000;i++)
{}
sleep(1);
}
return 0;
}
CPU 占用率如下

如果我把代碼修改成這樣
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0;
printf("%d:Cpu start...\n",getpid());
while(1)
{
for(i=0;i<100000000;i++)
{}
//sleep(1);
}
return 0;
}
CPU占用率如下:

關(guān)于這個問題,還有很多回復(fù)


至于能不能出現(xiàn)超過100%的CPU占用率,在多核的情況下肯定是可以的,至于單核是不會出現(xiàn)這個情況的。
歡迎一起交流


評論
圖片
表情
