欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编程之美

程序员文章站 2022-05-05 16:35:08
...

一、让CPU占用率曲线

大致画下来是正弦曲线,但是锯齿状的很厉害,不是很平滑。​​​编程之美编程之美
问题1、CPU的占用率固定在50%,为一条直线。
编程之美​​​​
看到这个问题,脑海思索了半天,却不得要领。印象中程序开的越多,电脑就会越卡,CPU占用率就会上升。但是要在代码里实现的话,那么就是要在这一个程序里完成。CPU就像一堆砖,多个人可以搬完一堆砖,一个人搬多点,也能搬完这堆砖。那么就是让程序在运行的时候,不断的去做事情,去搬砖,消耗CPU资源。不知道如何达到50%,但是可以先让CPU达到100%。

++i;简单的一行代码,如果重复1亿次,那么应该算是在不断的做事情。

所以第一次尝试是写了一段代码:

 while (true)
 {
     for (unsigned int i=0;i<36000000;++i){}
 }

然后发现并没有什么卵用, 没实现cpu达到100 %,大概是在25%左右,而且感觉曲线波动和我运行的程序关系不大。
编程之美

之后上网查资料,CPU的运算速度,是和主频成正比关系的。大概的一个计算公式:核数×主频×0.8,例如8核3.6ghz那么运算速度等于8×3.6×0.8=23.04ghz。然后我把次数改为23亿次,发现也没什么效果。而且断点放开以后,下一次断点进入,要等好久时间,大约3秒。

while (true)     /// 没实现cpu达到100 %,
{
    for (unsigned int i=0;i<2300000000;++i){}
}

再后来查资料,明白让一条线程死循环,对于8核16线程的电脑来说,CPU并不会达到100%。然后我修改了代码,开了16条线程来跑。成功让CPU占用率达到100%,截图都卡了我一下。
编程之美编程之美
然后我想那我开8条线程,是不是就可以50%了?随后发现,貌似还是100%。擦,见鬼了,随后改成4条线程,发现变成70了。也就是说CPU的最大运算数和线程数,线程函数内计算量成正比关系。但是公式怎么计算,我没推出来。
编程之美
上网查资料,有人写到多个CPU开多个线程就可以控制CPU占用率曲线到50%。虽然效果是达到了,但是貌似还是没具体领悟到真谛,觉得差了点什么。
编程之美
CPU总计的曲线虽然可以控制在50%左右,但是并没有让8个CPU都保持在50%,有可能是4个60%,4个40%,虽然8个总量的平均值是50%,但觉得不是我想要的效果,该如何控制每个CPU都是正好是50%呢?
现在了解下来的是有好几种控制方法?
1、计算CPU的主频,然后循环++i的方式来实现,貌似是最下乘的武功,而且在多核CPU的电脑上,我压根就没准确的计算出这个值是多少,到底循环多少次可以达到50%。还是多核下,根本就行不通这种方法。
2、通过GetTickCount(),貌似也没有达到想象中的效果。
然后编程之美中还提到了一个工具:Perfmon.exe,啥玩意?继续研究下。。。

相关标签: 编程之美