gpt4 book ai didi

getrusage 与 clock_gettime()

转载 作者:行者123 更新时间:2023-12-03 17:58:15 24 4
gpt4 key购买 nike

我正在尝试获取 Ubuntu 上进程消耗的 CPU 时间。据我所知,有两个函数可以完成这项工作:getrusage() 和 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp)。在我的代码中,在clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp) 之后立即调用getrusage() 总是给出不同的结果。

任何人都可以帮助我了解哪个功能提供更高的分辨率,以及这些功能有哪些优点/缺点?

谢谢。

最佳答案

getrusage(...)

  • 将 CPU 时间拆分为系统和用户组件 分别在 ru_utime 和 ru_stime 中。
  • 大致微秒分辨率: struct timeval 具有字段 tv_usec,但此分辨率通常限制在大约 4ms/250Hz (source)
  • 适用于 SVr4、4.3BSD、POSIX.1-2001:这意味着它适用于 Linux 和 OS X

  • See the man page

    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)
  • 系统时间和用户时间的总和 无法将其分成系统/用户时间组件。
  • 纳秒分辨率: struct timespec 是 struct timeval 的克隆,但使用 tv_nsec 而不是 tv_usec。确切的分辨率取决于定时器在给定系统上的实现方式,可以使用 查询。 clock_getres .
  • 需要您链接到 librt
  • 时钟可能不可用。在这种情况下,clock_gettime 将返回 -1 并将 errno 设置为 EINVAL,因此提供 getrusage 回退是个好主意。 (source)
  • 适用于 SUSv2 和 POSIX.1-2001:这意味着它适用于 Linux,但不适用于 OS X。

  • See the man page

    关于getrusage 与 clock_gettime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622371/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com