我有一个过程,在早期版本中花费了一些时间。
现在,当前版本中的相同过程需要更多时间。但是与以前相比,代码没有任何变化。我看到的一个观察结果是,与早期版本相比,服务器上还有其他一些进程消耗的CPU较高。所以我怀疑我的过程没有得到cpu时间,这就是为什么要花费更多时间的原因。
但是我需要证明这个过程在大多数情况下都在等待(空闲)。
因此,为此,我正在考虑使用getrusage()。但是由于我不确定如何使用该时间来计算进程空闲时间。
有人可以告诉我一个简单的示例,说明如何使用getrusage专门计算进程的空闲时间。

提前致谢。

最佳答案

您可以计算它的执行时间,而不用计算挂钟时间,而不必计算进程空闲时间。
在符合最新POSIX标准的操作系统(阅读Linux)中,可以使用 clock_gettime 函数轻松地做到这一点:

您可以使用CLOCK_REALTIME来获取挂钟时间,并采用程序开始和结束时返回的时间之间的差值来了解程序运行所需的时间(包括空闲时间)。使用CLOCK_PROCESS_CPUTIME_ID,您可以以类似的方式精确地测量您的进程在CPU上花费了多少。使用CLOCK_THREAD_CPUTIME_ID,您甚至可以分别获取每个线程的执行时间。
注意:如果进程/线程从CPU迁移到另一个,则CLOCK_*_CPUTIME_ID可能会变得不一致。记在脑子里。如果确实发生,则可以尝试将进程或其线程绑定(bind)到特定的CPU。
作为附带说明, time(1) 为您提供有关进程执行时间的信息,因此,如果挂钟时间足够长,例如可以由手表测量,则也可以使用此工具。
附言不要忘记与-lrt链接。

关于c++ - 如何找到进程的空闲时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24032303/

10-17 01:26