线程的执行时间改变



我使用这个方法:测量C中的执行时间(在Windows上)来测量所有线程的执行时间。我在Windows上使用vc++。

像这样:

//initialize start, end, frequency
std::thread thread1(...); 
// and so on I initialise all the threads
thread1.join();
//join all threads
//time = (start-end)/frequency
printf(time);

我多次运行它,我经常得到不同的执行时间。我有30%的变异。(这意味着我得到的值在100到70之间)。我不明白为什么?30%的变化不是很小。

谢谢

许多因素都会影响执行时间,从系统负载到内存使用再到星形对齐。您不需要指定执行时间的顺序,但是对于较低的值,30%的偏差肯定不是闻所未闻的。主要的结论是,执行时间本身基本上不能告诉我们关于系统的任何信息。

QueryPerformanceCounter是一个系统范围的计数器,因此您的结果取决于系统负载和进程调度的细节。

您可以使用QueryProcessCycleTime,它返回

进程的线程所使用的CPU时钟周期数。此值包括在用户模式和内核模式下花费的周期。

您可以使用GetCurrentProcess获取当前进程的句柄

最新更新