时钟和steady_clock测量的时间差

Viv*_*mar 4 clock c++11 c++-chrono

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

clock_t start = clock();
do_something();
clock_t end = clock();

printf("Time taken: %f ms\n", ((double) end - start)*1000/CLOCKS_PER_SEC);
Run Code Online (Sandbox Code Playgroud)

后来我读到有关chrono图书馆C++11,并试图测量与相同std::chrono::steady_clock如下

using namespace std::chrono;

auto start = steady_clock::now();
do_something();
auto end = steady_clock::now();
printf("Time taken: %lld ms\n", duration_cast<milliseconds>(end - start).count());
Run Code Online (Sandbox Code Playgroud)

由所述第一代码段(使用所测量的时间clock)为89.53 ms和由测得的steady_clock1140 ms.

为什么两个时钟测得的时间差别很大?

How*_*ant 5

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

Daniel H在评论中提出了一个很好的观点,即如果do_something()不受CPU约束,这也会发生.例如,如果它休眠,则锁定互斥锁时阻塞,等待条件变量等.

  • 这也会显示id`do_something`不受CPU限制,对吧? (2认同)