以相同的结果测量时间

Measure time with same result

本文关键字:测量 时间 结果      更新时间:2023-10-16

我想测量时间(非常精确地以毫秒为单位(并在某个时间启动另一个线程(总共 4 个(。我试过了:

double Time()
{
duration = (std::clock() - start);
return duration;
}
//...
start = std::clock();
while (Time() < 1000)
{
//Start thread...
//...
}

它有效,但在每个实验中,我都得到了不同的结果(差异很小(。 甚至可能吗?是否取决于有多少程序在后台运行(它会减慢我的计算机速度(?那么如果可能的话,我应该使用什么?谢谢

(对不起我的英语(

操作系统以量子形式运行 - 低于我们感知水平的少量处理。

在单个量子内,CPU 应合理稳定地运行。 如果您的任务将使用多个时间量程,则操作系统可以自由地将时间片用于其他任务。

使用条件变量 您可以notify_all唤醒任何等待的线程。

因此,开始线程数,但在测量它们并开始工作之前,请让它们等待condition_variable。 然后,当condition_variable notify_all线程将可运行时。 如果它们同时启动,您应该获得同步的稳定结果。

出现差异。

  1. 未计划 - CPU 上的内核正在执行其他操作,因此 1 个或多个线程错过了量程
  2. 在 IO 上被阻止。 如果需要与磁盘交互,则可能会导致阻塞,直到数据可用。
  3. 在互斥锁中被阻止 - 如果他们正在修改共享资源,则等待资源变为可用会增加时间。
  4. 缓存行为 某些操作会导致刷新所有 CPU 的缓存,这将影响所有线程的性能。
  5. 无论数据是否在缓存中,CPU 从 L1 缓存运行的速度都比从主内存运行得更快。 如果线程读取相同的数据,它们将相互帮助,使数据被缓存,并以相同的(ish(速度运行。