cpu利用率和cpu负载是什么?

我们经常会听到要好好使用cpu的资源,提高cpu利用率,要学习应对高负载的情况,那这个高负载其实大多数情况指的就是cpu负载。我们还会学习到一个命令是top,这个命令可以得到他们的数值和其他系统指标。那么什么是cpu利用率,其实就是单位时间里cpu被使用的时间,那么为什么cpu会没有被使用到呢,我们经常可以看到cpu负载都是在3以上,也就是说如果cpu核心有四个的话,那么同一时刻可能就有三个核心在工作,虽然核心的工作并不一定是平均分配的。cpu的工作时间并不等于使用时间,因为这个工作可能需要请求硬盘资源和系统资源,时间还有大部分花在了这些事情上了。所以有的人会说当应用是io密集型的时候,要使用更多的线程,因为更多的线程意味着更多的任务,也意味着每个cpu执行一个任务的时间缩短了,所以花在io阻塞,socket阻塞的时间就少了,因为他们是异步执行,也就可以提高cpu利用率了。

那么cpu负载是什么呢,其实就是所有cpu的运行的和在队列里等待的任务的数量,记住是所有cpu,所以4的负载率平均到每个cpu核心的任务数是4/逻辑cpu数,这个逻辑cpu数是因为有的cpu核心可以同时执行两个线程,所以哪怕有两个核心,我们也要当成有4个核心。负载数一般是每个核心承担0.7个任务最好,这个不是什么标准,我也不知道对不对,因为如果大于1,表示我们任务的延迟就比较大了,如果等于1,那么cpu就基本没闲着,对机器的损耗挺大的。

其实理解概念没什么用,我们给指导这里面的原理,比如线程是怎么被执行的,它是先告诉cpu我处于可执行状态,然后cpu把他放到等待队列里或执行,cpu会为它分配时间片,时间片就是给予的cpu执行时间,这里面通过一个算法,叫做线程调度算法,有兴趣的可以搜一下,有时间片,fifo,抢占式,优先级几种。当线程被执行后,它就会执行到时间片时间用完,如果这个线程都是io操作,那么cpu就相当于什么都没干了。

明天写一下对cpu缓存的理解。

猜你喜欢

转载自blog.csdn.net/j4791/article/details/82814563