通过时钟和steady_clock测量的时间差



我试图测量在我的代码中执行特定函数所花费的时间。最初我使用了如下clock()函数

clock_t start = clock();
do_something();
clock_t end = clock();
printf("Time taken: %f msn", ((double) end - start)*1000/CLOCKS_PER_SEC);

后来我在C++11阅读了有关chrono图书馆的信息,并试图用如下所示的std::chrono::steady_clock来测量相同的

内容
using namespace std::chrono;
auto start = steady_clock::now();
do_something();
auto end = steady_clock::now();
printf("Time taken: %lld msn", duration_cast<milliseconds>(end - start).count());

第一个代码片段(使用clock(测量的时间89.53 mssteady_clock测量的时间1140 ms

为什么两个时钟测量的时间相差这么大?

clock测量处理器时间,而steady_clock测量物理时间。 因此,如果do_something()被其他进程(例如检查邮件或其他(抢占,您可以获得这样的差异。

Daniel H 在下面的评论中提出了一个很好的观点,即如果 do_something() 不受 CPU 限制,也会发生这种情况。 例如,如果它处于睡眠状态,阻止锁定互斥锁,等待条件变量等。

最新更新