我试图以编程方式获取特定线程到目前为止花费的总时间。
getrusage
返回线程的CPU时间,但我想要总时间,即包括线程因任何原因被阻塞所花费的时间。
请注意,我将使用我编写的分析器来检测给定程序,从而利用此功能。
一个程序可能有很多线程(我专注于分析服务器,所以可能有很多)。在任何给定的时间我都想知道特定线程花了多少时间(到目前为止)。因此,生成每个线程的计时器都不方便。所以我希望使用与getrusage
类似的用法,例如它返回当前线程的总时间,或者我可以传递给它一个线程ID。所以手动机制,比如在线程产生时采用时间戳,然后再采用它们的差异,对我来说不是很有帮助。
有人可以建议怎么做吗?
谢谢!
答案 0 :(得分:0)
将当前时间保存在线程启动时。线程花费的总时间(计算运行时间和阻塞时间)就是:
current_time - start_time
当然,这几乎总是无用/无意义,这就是没有专用API的原因。
答案 1 :(得分:0)
根据您想要使用的内容,可以考虑的一种方法是将阻塞期间消耗的时钟滴答数加起来,这通常足够慢,可以隐藏一点这样的开销。因此,根据该总和以及您还测量的周围线程间隔,您可以计算该间隔内线程上的实时负载。当然,使用其他进程进行时间切片可以减少一些数量,并且捕获所有阻塞可能非常容易或非常困难,具体取决于您的情况。