C++ 中带线程的时钟函数

Posted

技术标签:

【中文标题】C++ 中带线程的时钟函数【英文标题】:clock function in C++ with threads 【发布时间】:2016-02-24 03:08:41 【问题描述】:

这里有一个非常有趣的注释:http://en.cppreference.com/w/cpp/chrono/c/clock

"只有对 std::clock 的不同调用返回的两个值之间的差异才有意义,因为 std::clock 时代的开始不必与程序的开始重合。std::clock 时间可能快于或慢于挂钟,取决于操作系统给予程序的执行资源。例如,如果 CPU 被其他进程共享,则 std::clock 时间可能会比挂钟提前。 另一方面,如果当前进程是多线程的,并且有多个执行内核可用,std::clock 时间可能会比挂钟快。"

为什么使用多线程可以加快时钟速度?我正在检查一个 C++ 程序的性能与没有它的线程,我注意到线程的时间相似(不是更好)但 感觉 更快(比如说 8 秒在 3 秒运行时)。

【问题讨论】:

请注意,文档中说的是“可以提前”,而不是“将提前”。 感谢您的澄清。不过,这是一件有趣的事情。 众所周知,程序拥有的线程越多,程序就越重。因此,这显然是相对论的影响 【参考方案1】:

如果有多个内核可用,并且您正在运行多个线程,则可能有多个线程同时在不同的内核上执行。由于clock() 测量处理器时间,它的推进速度可能比挂钟时间快,因为多个线程同时推进它。

正如文档中给出的示例 - 它显示创建了两个线程,报告的 clock() 值几乎是报告的挂钟时间的两倍。

【讨论】:

以上是关于C++ 中带线程的时钟函数的主要内容,如果未能解决你的问题,请参考以下文章

29.Windows线程切换之被动切换(KiDispatchInterrupt)

PyQt中带有QThread的后台线程

VB.NET(WinForms)中带参数的安全线程池队列

C++线程更新变量问题

C++笔记--Linux编程(13)-守护进程-线程

C++ 线程