如何测量创建和启动线程所需的时间?(Linux、pthreads 或 boost::thread)。
感谢您的建议!
您可能应该指定您想要测量的确切内容,因为至少有两种可能的解释(原始线程内部“忙碌”pthread_create
的时间与从调用pthread_create
到另一个线程实际执行其第一条指令的时间)。
在任何一种情况下,您都可以在调用之前和之后或调用之前使用clock_gettime
with查询单调实时,并将其作为线程函数内的第一件事。然后,从第一个值中减去第二个值。CLOCK_MONOTONIC
pthread_create
要知道在内部花费了多少时间phtread_create
,CLOCK_THREAD_CPUTIME_ID
这是一种替代方法,因为这仅计算您的线程使用的实际时间。
然而,总而言之,衡量这种事情有点毫无意义。它几乎不会告诉您它在您的系统或另一个系统上的真实条件下将如何表现,具有未知的进程和未知的调度策略和优先级。
在另一台机器上,或者在另一天,您的线程可能只是在 100 或 200 毫秒后安排。如果你相信这不会发生,你就死定了。
编辑:
关于上述评论中添加的信息,如果您需要在“正常调度量”范围内“非常规地执行操作”,您可以只创建一个线程,nanosleep
用于 15 或 30毫秒。当然,sleep 并不是非常准确或可靠,因此您可能希望例如阻塞 a timerfd
(如果可移植性不是最高优先级,否则使用信号传递计时器)。
使用单个计时器/等待来安排不规则的时间间隔也不是什么大问题,您只需要跟踪下一个事件的到期时间。这也是现代操作系统的做法(阅读“计时器合并”)。