墙上时钟

根据某个日历返回当前的日期与时间。

  • Linux 上的 clock_gettime(CLOCK_REALTIME)
  • Java 中的 System.currentTimeMills()

会返回 1970-01-01(UTC)的时间戳(秒和毫秒)。

墙上时钟会和 NTP 服务器同步产生跳跃导致一些奇怪的问题。

单调时钟

更适合测量持续时间段(时间间隔),如超时或服务的响应时间。保证总是向前(不会出现墙上时钟的回拨现象)。

  • Linux 上的 clock_gettime(CLOCK_MONOTONIC)
  • Java 中的 System.nanoTime()

单调时钟多个节点的对比没有任何意义,多路 CPU 可能有单独的计时器,且不与其他 CPU 进行同步。由操作系统进行补偿它们之间的偏差。

NTP 检测到本地石英比时间服务器更快或者更慢,NTP 会调整本地石英的震动频率(摆动),最大幅度为 0.05%。 NTP 并不会直接调整单调时钟向前或回拨