gpt4 book ai didi

c++ - 测量时间,结果相同

转载 作者:行者123 更新时间:2023-11-30 05:11:22 26 4
gpt4 key购买 nike

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

double Time()
{
duration = (std::clock() - start);
return duration;
}

//...

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

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

(对不起我的英语)

最佳答案

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

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

使用 condition variable您可以 notify_all 唤醒任何等待的线程。

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

出现差异。

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

关于c++ - 测量时间,结果相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45067491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com