单调时钟与墙上时钟的区别?ntp如何优雅校时?

简介: 单调时钟与墙上时钟的区别?ntp如何优雅校时?

墙上时钟


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

  • 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 并不会直接调整单调时钟向前或回拨

如何解决?


t2 的时间真的会比 t1 小吗?


这里就牵涉出 2 个概念:墙上时钟、单调时钟,它们之间有什么区别呢?

  • 墙上时钟:通常就是指前面讲到的世界协调时 UTC,校准时间后,可能发生回拨
  • 单调时钟:计算机自启动以后经历的纳秒数,不会回拨
t1 = time.now()
// 时间发生校准
t2 = time.now()
// t2比t1小怎么办?
elapsed = t2 - t1

一般我们写的代码,像上面程序调用的「时间 API」,通常获取的时间是墙上时钟,所以,如果时间发生校准,就可能会发生「时光倒流」的情况。


这必然对程序产生很大的影响,怎么解决这个问题呢?


幸运的是,NTP 在校准时间时,提供了 2 种方式:

  1. ntpdate:一切以服务端时间为准,「强制修改」本机时间
  2. ntpd:采用「润物细无声」的方式修改本机时间,把时间差均摊到每次小的调整上


也就是说,ntpd 当接收到需要「回拨」的时间时,会让本机时间走得「慢」一点,小步调整,逐渐与服务端的时钟「对齐」,这样一来,本机时间依旧是递增的,避免发生「倒流」。


当我们在配置 ntp 服务时,需要格外注意这种情况。另外,在编写程序时,也要注意调用的时间 API 获取的是哪个时间,避免业务逻辑发生异常。

f354420af5604d4c9b6e9344e7d0b83a.png

目录
相关文章
|
小程序 数据安全/隐私保护 开发者
【已解决】开发者扫码登录提示“需要验证小程序密码”
开发者扫码登录提示“需要验证小程序密码”
1264 0
【已解决】开发者扫码登录提示“需要验证小程序密码”
|
7月前
|
人工智能 缓存 运维
企业级RAG实战:如何让7432页20年老文档在3秒内回答问题?
AI博主maoku分享企业级RAG实战:将7432页、20年历史的PDF技术文档,从“沉睡墓地”升级为秒级响应智能助手。详解混合检索(BM25+向量)、语义分块、FlashRank重排序等关键技术,全程零GPU、低成本、可落地,查询耗时由25分钟压缩至3–5秒,ROI仅需1天。
|
安全 关系型数据库 数据库
数据仓库是什么,一文读懂数据仓库设计步骤
数据仓库是企业整合、存储和分析历史数据的核心工具,支持决策与趋势预测。设计需经历明确业务需求、梳理数据源、概念建模、逻辑设计、物理实现及测试维护等步骤。通过合理规划结构、安全机制与数据集成(如使用FineDataLink),可有效提升数据质量与分析效率,助力企业发挥数据价值。
|
存储 算法 Linux
深入理解Linux虚拟内存管理(二)(下)
深入理解Linux虚拟内存管理(二)
744 0
|
算法 编译器 C语言
if else 和 switch的效率
switch在判断分支时,没有判断所有的可能性,而是用一个静态表来解决这个问题,所以速度要比if-else快。 但是,switch对较复杂的表达式进行判断,所以当我们需要判断一些简单数值时,用switch较好。
4045 0
|
自然语言处理 算法
文本分析-使用jieba库实现TF-IDF算法提取关键词
文本分析-使用jieba库实现TF-IDF算法提取关键词
1505 1
|
Linux
Linux下使用Wireshark抓包教程
在实际开发中,涉及网络传输的环节是非常多的。在这些过程中,我们经常有查看被传输的数据信息的需求,因此,抓包工具应运而生。Wireshark便是一款非常有名的抓包及分析软件,具有强大的协议解析能力。本文将介绍如何在Linux系统中安装Wireshark抓包工具,以CentOS7为例。
1380 0
Linux下使用Wireshark抓包教程
|
Web App开发 JSON iOS开发
抖音 根据视频id获取视频详情接口分析
抖音 根据视频id获取视频详情接口分析
2395 1
抖音 根据视频id获取视频详情接口分析