让CPU使用率正弦变化

网络上流传一个面试题,说如何编程让CPU的使用率按照正弦方式变化

代码如下(运行环境Linux):

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

int main(int argc,char* argv[])

{

struct timeval tv;

long long start_time,end_time;

long long busy_time[100];

long long idle_time[100];

int i;

for(i = 0; i < 100; i++)

{

busy_time[i] = 100000 * 0.5 * (sin(i*0.0628) + 1);

idle_time[i] = 100000 - busy_time[i];

}

i = 0;

while(1)

{

         gettimeofday(&tv,NULL);

         start_time = tv.tv_sec*1000000 + tv.tv_usec;

         end_time = start_time;

         while((end_time - start_time) < busy_time[i])

         {

         gettimeofday(&tv,NULL);

         end_time = tv.tv_sec*1000000 + tv.tv_usec;

         }

         usleep(idle_time[i]);

         i = (i+1)%100;

}

return 0;

}

编译时候需要加上 –lm 选项,比如gcc main.c –o main –lm

 

具体原理是:选定一个时间段,比如我们10s内要画出一个正弦函数的完整曲线。

将10s等分100分,每份100ms。在这个每份的100ms内,CPU运行一定ms,空闲一定ms,这个比例按照正弦变化,最后CPU的使用率就是正弦。原因是:比如在某个时间点的100ms(100000us)内,空闲了50ms,运行了50ms,那么此时资源管理器上的显示CPU使用率应该为50%。

posted @ 2018-07-09 22:46  积跬步,致千里  阅读(173)  评论(0编辑  收藏  举报