[英]Why is there a difference in execution time while running the same program multiple times?
可能是一个愚蠢的问题。 我注意到在Linux机器上运行C
的简单Hello World
程序时执行时间的差异(虽然它不是语言特定的)。
程序:
#include<stdio.h>
#include<time.h>
int main()
{
clock_t begin, end;
double time_spent;
begin = clock();
printf("%s", "Hello World\n");
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("%f\n", time_spent);
return 0;
}
O / P:
$ ./hello
Hello World
0.000061
$ ./hello
Hello World
0.000057
$ ./hello
Hello World
0.000099
这是在四核机器上测试的,平均负载为0.4,并且有足够的可用内存。 虽然差异很小,但背后的原因是什么呢?
除非您运行的是实时操作系统,否则您至少会看到运行时间略有不同。 这是由于OS调度,当时可能发生的任何I / O等。
0.04毫秒的差异根本不是很大的差异。
如果程序在循环中运行至少几秒钟,则应减少变异百分比。
简单的答案是:系统其余部分发生了什么。
所有这些后台进程都做'填充':处理网络数据包; 将数据保存或记录到磁盘; 决定醒来并检查当前的网络时间; 谁知道! 对于代码这么短的时间间隔,这些微小的东西可以产生很大的不同。 尝试循环1000次并检查这些结果。 当然,输出到屏幕涉及图形,更新,其他程序......也许你应该只做一个:
unsigned i, j;
...
// Wait a LONG time!
for (i=0;i<5u;++i) { // 5 is about a minute on my machine
for (j=0;j<~0u;++j) {
// Twiddle thumbs!
} // for
} // for
在你的时间内。
两个主要原因:
磁盘缓存:第一次加载可执行文件后,它可能会保留在内存中,以便后续运行不需要从磁盘中获取。
系统活动:您的处理器在消耗资源(内存,CPU,磁盘访问)的同时还在做什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.