CPU占用率是什么?
嵌入式Linux
共 2117字,需浏览 5分钟
· 2021-05-25
这是昨晚上在朋友圈发的一个讨论
![](https://filescdn.proginn.com/52d6a54d3475330d9005635880256354/b7d8d28edfaa90dfdc642a95716c0b6c.webp)
回答的问题很多
![](https://filescdn.proginn.com/23ee5d8a48c057b730a8a0dd082bd26a/1d37a8618fa95349457e5fa77e4dedcf.webp)
因为这个问题,我晚上也没早睡,就想把这个讲清楚
说这个问题之前我们先了解下时间片调度算法,因为用这个来讲比较清楚。
![](https://filescdn.proginn.com/a210124cc1be475214dde97272a7e8c1/f725d16352c6db05ccfb5cd445efc664.webp)
CPU可以执行任务,CPU给哪个进程执行,哪个进程就可以占用CPU去做它想做的事情,如果进程的优先级比较低,调度器每次调度的时候,就容易被高优先级的进程插队,这个进程实际上占有CPU的时间就会比较短。
什么是CPU是利用率呢?
先说下,这个指的是有操作系统的情况下,有多任务系统,那系统有一个调度室,调度室分配给进程的使用CPU时间T1,进程在被调度时,进程实际占用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占用率是
![](https://filescdn.proginn.com/8a31c40e3080d45ddd1111dc98eb8c00/bc45634a6edc6bbfddb86b098e0975f6.webp)
如果我们代码修改成这样
#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 占用率如下
![](https://filescdn.proginn.com/726657acb6ffdf29a0efda4367835fda/dc626994740459628bbe92d588fdaee3.webp)
如果我把代码修改成这样
#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占用率如下:
![](https://filescdn.proginn.com/d98c9af452452fe405c3efbe5e838ddc/f79543e8656eafbdd44abbcaace85cb3.webp)
关于这个问题,还有很多回复
![](https://filescdn.proginn.com/cb710493f74d4343886d90ad18c7e168/8a6218dc1962f4ebffb920cc5d176617.webp)
![](https://filescdn.proginn.com/22dbbac17d3d8b2bd9ba8e1486da1ace/c88c9b686f89c0489bdcc78af56bd50b.webp)
至于能不能出现超过100%的CPU占用率,在多核的情况下肯定是可以的,至于单核是不会出现这个情况的。
欢迎一起交流
![](https://filescdn.proginn.com/cae7a2d38df6d56bf95b7277f25fd39b/899a5a7d1c5afa2652116d9c3be5d19e.webp)
评论