单调时钟与墙上时钟的区别?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

目录
相关文章
|
小程序 数据安全/隐私保护 开发者
【已解决】开发者扫码登录提示“需要验证小程序密码”
开发者扫码登录提示“需要验证小程序密码”
1228 0
【已解决】开发者扫码登录提示“需要验证小程序密码”
|
6月前
|
人工智能 缓存 运维
企业级RAG实战:如何让7432页20年老文档在3秒内回答问题?
AI博主maoku分享企业级RAG实战:将7432页、20年历史的PDF技术文档,从“沉睡墓地”升级为秒级响应智能助手。详解混合检索(BM25+向量)、语义分块、FlashRank重排序等关键技术,全程零GPU、低成本、可落地,查询耗时由25分钟压缩至3–5秒,ROI仅需1天。
|
人工智能 搜索推荐 数据挖掘
2024中国CRM排行榜
中国的 CRM 发展经历了从萌芽到快速成长的过程。早期主要依赖手工记录,20 世纪 50 年代商用计算机普及后,CRM 开始发挥作用。90 年代末,CRM 理念引入中国,市场由国外厂商主导。2004 年后,SaaS 模式兴起,但因企业接受度低、成本高而遇到挑战。2008 年,移动互联网推动 CRM 快速发展,2015 年 SaaS CRM 迎来爆发。如今,市场规模不断扩大,预计 2024 年将突破 250 亿元。主要品牌如销售易、Zoho、SAP 和微软 Dynamics 365 等,各具特色,满足不同企业需求。
2024中国CRM排行榜
|
监控 算法 搜索推荐
DAMON —— 设计 【ChatGPT】
DAMON —— 设计 【ChatGPT】
|
存储 算法 Linux
深入理解Linux虚拟内存管理(二)(下)
深入理解Linux虚拟内存管理(二)
710 0
|
算法 编译器 C语言
if else 和 switch的效率
switch在判断分支时,没有判断所有的可能性,而是用一个静态表来解决这个问题,所以速度要比if-else快。 但是,switch对较复杂的表达式进行判断,所以当我们需要判断一些简单数值时,用switch较好。
4024 0
|
自然语言处理 算法
文本分析-使用jieba库实现TF-IDF算法提取关键词
文本分析-使用jieba库实现TF-IDF算法提取关键词
1475 1
|
机器学习/深度学习 人工智能 缓存
走近高德驾车ETA(预估到达时间)
ETA(Estimated Time of Arrival),即预估到达时间,指的是用户在当前时刻出发按照给定路线前往目的地预计需要的时长。如何准确地预估ETA对于高德地图的诸多业务板块都起到至关重要的作用。
走近高德驾车ETA(预估到达时间)
|
NoSQL 网络协议 程序员
7年资深后端带你读懂Redis源码,共总结了这7点心得
7年资深后端带你读懂Redis源码,共总结了这7点心得
72288 3
7年资深后端带你读懂Redis源码,共总结了这7点心得

热门文章

最新文章