您能解释一下 CLOCK_REALTIME
和 CLOCK_MONOTONIC
在 Linux 上由 clock_gettime()
返回的时钟之间的区别吗?
如果我需要计算外部源生成的时间戳与当前时间之间的耗时,哪个更好?
最后,如果我有一个 NTP 守护进程定期调整系统时间,这些调整如何与 CLOCK_REALTIME
和 CLOCK_MONOTONIC
中的每一个交互?
最佳答案
CLOCK_REALTIME
表示机器对当前挂钟时间的最佳猜测。如Ignacio和 MarkR也就是说,这意味着 CLOCK_REALTIME
可以随着系统时间时钟的更改(包括 NTP 更改)前后跳转。
CLOCK_MONOTONIC
表示自过去某个任意固定点以来经过的绝对挂钟时间。它不受系统时钟变化的影响。
如果您想计算在一台机器上观察到的两个事件之间的耗时而无需重新启动,CLOCK_MONOTONIC
是最佳选择。
请注意,在 Linux 上,CLOCK_MONOTONIC
不会测量挂起所花费的时间,尽管根据 POSIX 定义它应该这样做。您可以使用 Linux 特定的 CLOCK_BOOTTIME
作为在挂起期间保持运行的单调时钟。
https://stackoverflow.com/questions/3523442/