测量创建线程所需的时间

时间:2012-05-02 15:17:58

标签: c++ linux multithreading boost pthreads

如何衡量创建和启动线程所需的时间? (Linux,pthreads或boost :: thread)。

感谢您的建议!

1 个答案:

答案 0 :(得分:2)

您应该指定您想要测量的内容,因为至少有两种可能的解释(原始线程在pthread_create内“忙”的时间与从调用pthread_create到调用CLOCK_MONOTONIC的时间相比其他线程实际执行其第一条指令。)

在任何一种情况下,您都可以在调用pthread_create之前和之后或调用之前使用clock_gettimephtread_create查询单调实时,并作为线程函数内的第一个内容。然后,从第一个值中减去第二个值。

要了解CLOCK_THREAD_CPUTIME_ID内部花费的时间,nanosleep是另一种选择,因为这只会计算线程使用的实际时间。

然而,总而言之,衡量这种事情有点毫无意义。它告诉你几乎没有什么关于它在你的系统或其他系统上的真实条件下的行为,具有未知的进程和未知的调度策略和优先级。
在另一台机器上,或在另一天,您的线程可能只是在100或200毫秒后安排。如果你依赖于不会发生这种情况的事实,那你已经死了。

修改
关于上述评论中添加的信息,如果您需要在“正常调度量化”范围内的“非定期执行操作”,您可以创建一个单独的线程timerfd 15或30毫秒。当然,睡眠不是非常准确或可靠,所以你可能想要例如在{{1}}上阻止(如果可移植性不是最高优先级,否则使用信号传递计时器) 使用单个计时器/等待计划不规则间隔也不是什么大问题,您只需要跟踪下一个事件到期的时间。这就是现代操作系统的用法(阅读“计时器合并”)。