你能解释一下Linux上clock_gettime()
返回的CLOCK_REALTIME
和CLOCK_MONOTONIC
时钟的区别吗?
如果我需要计算外部源产生的时间戳和当前时间之间经过的时间,哪一个是更好的选择?
最后,如果我有一个NTP守护进程定期调整系统时间,这些调整如何与CLOCK_REALTIME
和CLOCK_MONOTONIC
交互
发布于 2010-08-20 09:45:42
CLOCK_REALTIME
表示机器对当前挂钟、一天中的时间的最佳猜测。正如Ignacio和MarkR所说,这意味着CLOCK_REALTIME
可以随着系统时间时钟的改变而向前和向后跳转。
CLOCK_MONOTONIC
表示自过去某个任意固定点以来经过的绝对挂钟时间。它不受系统时间时钟变化的影响。
如果您希望计算在一台计算机上观察到的两个事件之间的运行时间,而不需要重新启动,则CLOCK_MONOTONIC
是最佳选择。
注意,在Linux上,CLOCK_MONOTONIC
不会测量挂起所花费的时间,尽管根据POSIX的定义,它应该测量挂起时间。您可以将特定于Linux的CLOCK_BOOTTIME
用于在挂起期间保持运行的单调时钟。
发布于 2010-08-19 23:37:52
CLOCK_REALTIME
受到NTP的影响,可以向前和向后移动。CLOCK_MONOTONIC
并非如此,它以每个节拍一个节拍的速度前进。
发布于 2010-08-20 00:20:45
除了Ignacio's answer之外,CLOCK_REALTIME
还可以飞跃前进,偶尔也会后退。CLOCK_MONOTONIC
两者都不做;它只是继续前进(尽管它可能会在重启时重置)。
一个健壮的应用程序需要能够容忍CLOCK_REALTIME
偶尔向前跳跃(可能偶尔会非常轻微地向后跳跃,尽管这更多是一种边缘情况)。
想象一下,当你挂起你的笔记本电脑时会发生什么-- CLOCK_REALTIME
会在简历之后向前跳转,而CLOCK_MONOTONIC
不会。在VM上试用它。
https://stackoverflow.com/questions/3523442
复制相似问题