CLOCK_REALTIME和CLOCK_MONOTONIC之间的区别?
你能解释一下
clock_gettime()
在Linux上返回的CLOCK_REALTIME
和CLOCK_MONOTONIC
时钟之间的区别吗?
如果我需要计算外部源生成的时间戳与当前时间之间的经过时间,哪个是更好的选择?
最后,如果我有一个NTP守护进程定期调整系统时间,那么这些调整如何与CLOCK_REALTIME
和CLOCK_MONOTONIC
相互作用?
没有找到相关结果
已邀请:
5 个回复
弛保矮瘦敖
表示机器对当前挂钟,时间时间的最佳猜测。正如Ignacio和MarkR所说,这意味着当系统时钟发生变化时,
可以向前和向后跳跃,包括NTP。
表示从过去的某个任意固定点开始的绝对经过的挂钟时间。它不受系统时钟变化的影响。 如果要计算在一台机器上观察到的两个事件之间经过的时间而没有重新启动,则
是最佳选择。 请注意,在Linux上,
不会测量挂起所花费的时间,尽管它应该通过POSIX定义。您可以使用特定于Linux的
作为在暂停期间保持运行的单调时钟。
盛梯獭八搽
宠封钞轰
受NTP影响,可以向前和向后移动。
不是,并且每个刻度以一个刻度前进。
窃誓额
可以在飞跃中前进,偶尔向后。
既不会;它只是继续前进(虽然它可能在重新启动时重置)。 一个强大的应用程序需要能够容忍偶尔跳跃向前跳跃(并且可能偶尔向后略微向后跳跃,尽管这更像是一个边缘情况)。 想象一下,当你暂停你的笔记本电脑时会发生什么 - resume0ѭ在简历之后跳转,
没有。在VM上试用它。
阀傻
: 该时钟代表测量系统实时的时钟。对于此时钟,clock_gettime()返回并由clock_settime()指定的值表示自Epoch以来的时间量(以秒和纳秒为单位)。
(可选功能): 对于此时钟,clock_gettime()返回的值表示自过去未指定的点(例如,系统启动时间或Epoch)以来的时间量(以秒和纳秒为单位)。系统启动时间后,这一点不会改变。无法通过clock_settime()设置CLOCK_MONOTONIC时钟的值。
给出了一个重要提示:POSIX系统能够随意改变
,所以不要依赖它既不连续也不向前流动。 NTP可以使用
实现,并且只能影响
。 Linux内核实现似乎将启动时间作为
的时代:CLOCK_MONOTONIC的起点