为什么同一次执行的时间不同

why the time is different for the same execution?

本文关键字:执行 一次 时间 为什么      更新时间:2023-10-16

我正在使用clock()计算方法的时间,它为同一方法提供了不同的值。

为什么结果是这样的?

for(int i=0;i<10;i++){
start = clock();
x=FindPrimeNumber(900);
end = clock();
cout << end <<" "<< start  <<endl;
}

我使用#pragma optimize(",off)禁用JIT优化同样的事情

时间:258时间:255时间:253时间:253时间:254时间:253时间:252

第二个问题是,我们如何只计算clock()等方法的cpu时间,而只计算cpu时间?

窗口的量子值是多少?(大约40微秒)量子是其他进程可以在cpu上运行的时间?

谢谢大家。

这是操作系统的indeterminism的一部分。你可以在(看似)相同的条件下运行你的程序,它可以更快或更慢地运行,这取决于:

  • 有多少个可运行的进程
  • 可运行进程的行为如何?(高IO?高CPU?)

在执行过程中,进程的优先级甚至可能发生变化。例如,如果您的进程正在使用其整个时间段,则它可能会被移动到调度队列中的较低级别,这意味着您的程序运行频率将降低(操作系统预测未来会有很高的使用率)。

无法保证您的进程在某个特定时间会在CPU上运行。


我对第二个问题的回答是:与其考虑方法的开始和结束时间,为什么不计算开始和结束之间的差异?

int start = clock();
methodCall();
int elapsedTime = clock() - start;

正如我之前所说,这不会在每次运行时都给你相同的结果。但是,这应该会给你一个完成方法所需时间的近似值。

最后一点:当为一个平台构建代码时,无论是Windows、Mac OSX还是Linux,你都不应该担心你的时间段有多长。你的进程无法检测到它何时从CPU上取下(或者至少在它重新启动之前不会检测到)。

流程是操作系统提供的抽象,它使我们不必担心如何管理流程的复杂细节。

对于第一个答案,我同意约翰的观点。

关于第二个答案,更多细节:

Clock()方法在Linux中提供cpu时间。访问以下解释答案:

如何在Linux/Windows上测量CPU时间和挂钟时间?