[英]Why does the runtime of high_resolution_clock increase with the greater frequency I call it?
在下面的代码中,我重复调用std::chrono::high_resolution_clock::now
两次,并测量这两次调用之间花费的时间。 我预计这次会非常小,因为在这两个调用之间没有运行其他代码。 但是,我观察到奇怪的行为。
正如预期的那样,对于小 N,最大元素在几纳秒内。 然而,我增加 N 的次数越多,我就会得到非常大的异常值,并且已经达到几毫秒。 为什么会这样?
换句话说,为什么在下面的代码中,当我增加 N 时,v 的最大元素会增加?
#include <iostream>
#include <vector>
#include <chrono>
#include <algorithm>
int main()
{
using ns = std::chrono::nanoseconds;
uint64_t N = 10000000;
std::vector<uint64_t> v(N, 0);
for (uint64_t i = 0; i < N; i++) {
auto start = std::chrono::high_resolution_clock::now();
v[i] = std::chrono::duration_cast<ns>(std::chrono::high_resolution_clock::now() - start).count();
}
std::cout << "max: " << *std::max_element(v.begin(), v.end()) << std::endl;
return 0;
}
您运行循环的时间越长,您的操作系统就越有可能确定您的线程目前已经消耗了足够的资源并将其挂起。 循环运行的时间越长,在这些调用之间发生暂停的可能性就越大。
由于您只查看“最大”时间,因此只需发生一次即可使最大时间达到毫秒范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.