简单的程序使用太多 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
循环。
编辑:为什么这个问题被否决了?
我想知道为什么下面的代码使用了很多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
循环。