简单的程序使用太多 cpu

simple program using too much cpu

编辑:为什么这个问题被否决了?

我想知道为什么下面的代码使用了很多CPU。我看不到任何可能导致此问题的内容。 就是下面的代码。

#include <stdio.h>
#include <time.h>


void main(){

    clock_t begin;
    double time_spent;
    int i = 0;


    while(1){

        begin = clock();
        time_spent = 0;
        while(time_spent < 60) {
                time_spent = (double)(clock() - begin) / CLOCKS_PER_SEC;
        }
        i++;
        printf("Eine Minute vergangen           %i\n", i);
    }
}

这个程序基本上是检查一分钟过去了,计算已经完成了多少分钟并打印出来。

我在 ubuntu 终端上 运行 这个,它糟透了我的 CPU。有人可以帮我解决这个问题吗?

没有什么可以减慢第二个 while 循环(如睡眠或 IO 操作),因此它的运行速度与 OS 一样快,处理器将执行它。

输入 while(1),表示 'run the loop for infinity'。这意味着您的循环将永远一遍又一遍地执行相同的过程。没有其他条件语句告诉它什么时候停止,所以在编译时,它会识别这一点,当你 运行 它时,计算机将永远 运行 程序尽可能快。随着时间的推移,这将使用大量 CPU 资源,这就是您注意到的 CPU.

坐在公交车站,等公交车一个小时左右到,你不会每一秒,每一毫秒,......,不是吗?但这正是您告诉 CPU 要做的,甚至值得您尽可能快地告诉 "look up the time"。

因此,根据所需的准确性,告诉 CPU 在检查时间之间休息更长或更短。

如果 1 秒的精度就足够了,那么通过添加

在测试时间之间等待 1 秒
      sleep(1);

进入内部 while 循环。