2

我正在尝试以编程方式获取到目前为止特定线程所花费的总时间。

getrusage返回一个线程的 CPU 时间,但我想要时间,即包括线程因任何原因被阻塞所花费的时间。

请注意,我将通过使用我编写的分析器检测给定程序来利用此功能。

一个程序可能有很多线程(我专注于分析服务器,所以可以有很多)。在任何给定时间,我都想知道特定线程花费了多少时间(到目前为止)。因此,在每个线程产生时为每个线程启动一个计时器并不方便。所以我想要一些类似于它的用法,getrusage例如它返回当前线程的总时间,或者我可以将一个线程ID传递给它。因此,手动机制(例如在生成线程时获取时间戳,然后再获取它们的差异)对我来说不是很有帮助。

谁能建议如何做到这一点?

谢谢!

4

2 回答 2

0

根据您要使用它的目的,可以考虑的一种可能性是将阻塞期间消耗的时钟滴答数相加,这通常足够慢,从而隐藏了这样的一点开销。因此,根据该总和以及您还测量的周围线程间隔,您可以计算该间隔内线程上的实时负载。当然,与其他进程进行时间切片会在一定程度上消除这种情况,并且捕获所有阻塞可能非常容易或非常困难,具体取决于您的情况。

于 2017-03-09T21:29:44.053 回答
0

保存线程启动时的当前时间。线程花费的总时间,包括运行时间和阻塞时间,就是:

current_time - start_time

当然,这几乎总是无用/无意义的,这就是为什么没有专门的 API 的原因。

于 2017-03-06T13:15:58.017 回答