编程之美-控制cpu占用率

我的电脑配置: mac 3.1GHz
目标是做到控制cpu占用率在50%

首先对占用率可以每秒统计一次平均值,也可以每2秒统计一次,这里就先按2秒计算一次cpu占用率,使得占用率维持在50%。

用到的代码是for循环和sleep,空的for循环时候cpu占用率可以到100%,sleep是0%,只要控制这两段代码各自执行1s(我们2s统计一次cpu占用率,那么统计结果就是50%),所以问题就是怎么样控制空的for循环执行1s。

主频=1/时钟周期,主频越高意味着时钟周期越短,假设一个时钟周期,mac的cpu可以执行1条汇编指令(编程之美取的是2条,但实验证明我的mac应该是1个时钟周期执行1条指令),所以我的电脑1s可以执行的汇编指令条数是3.1*10^9。

而一个for循环的汇编指令是5条,具体那5条干嘛的就先别管了(因为我也看不懂,这里也不需要懂),所以1s可以执行的for循环次数是3.1*10^9/5

用python计算一下:

>>>3.1*10**9/5
620000000.0

所以执行620000000次for循环是1s,然后再sleep 1s,再2s计算一次cpu占用率结果就是50%

c代码:

#include
#include

    int
main (  )
{
    for(;;){
        for(long i = 0; i < 620000000; i++){
        }
        sleep(1);
    }
    return 0 ;
}

(我用的vim的cvim插件,这个int会跑到main上面。。看着别扭)

编译:

gcc main.c

执行:

./a.out

看下a.out的pid,方便用htop或者top命令查看cpu占用率:

ps aux | grep a.out

huangzhihao      79649  34.4  0.0  4268128    656 s000  S+    2:27上午   0:02.93 ./a.out

第二列就是pid

查看cpu占用率

htop -d 20 -p 79649

Done!

你可能感兴趣的:(编程之美-控制cpu占用率)