我试图测量在我的代码中执行特定函数所花费的时间。最初我使用了如下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 ms
,steady_clock
测量的时间1140 ms
。
为什么两个时钟测量的时间相差这么大?
clock
测量处理器时间,而steady_clock
测量物理时间。 因此,如果do_something()
被其他进程(例如检查邮件或其他(抢占,您可以获得这样的差异。
Daniel H 在下面的评论中提出了一个很好的观点,即如果 do_something()
不受 CPU 限制,也会发生这种情况。 例如,如果它处于睡眠状态,阻止锁定互斥锁,等待条件变量等。