计算机时间到底是怎么来的?程序员必看的时间知识!
Python涨薪研究所
共 8098字,需浏览 17分钟
·
2021-07-15 16:23
为什么计算机的时间有时候「走不准」? 计算机究竟是怎么「自动校准」时间的? 我们经常看到的 UTC 时间,到底是什么? 我们在新闻上看到的「北京时间」,真的来自北京吗?
时间为什么总是走“不准”?
如何校准时间?
时间是怎么来的?
一秒到底有多长?
注:这个测量原理和测量过程比较复杂,这里把这些物理细节简化了。不用太过纠结这个数值是怎么测量出来的,你只需要理解,这个微观原子内部的振荡周期是非常稳定的,它比之前根据天文现象测量出来的秒,要精确多得多。
科研技术还在发展,精密设备和测量能力也越来越高,最新的原子钟甚至可以达到 1 亿年不差 1 秒!
世界标准时间是怎么来的?
世界时:基于天文现象 + 钟表计时,永远与地球自转时间相匹配 国际原子时:基于原子钟计时,每一秒的周期完全等长且固定
原子时走得快,世界时走得慢,时间越久,两者差距越来越大 日复一日,几百年后,世界时的正午 12 点是太阳高照的时刻,而原子时可能已经走到了下午 2 点了 几千年后,太阳高照的时刻,原子时可能已经走到了晚上 8 点!
当然,当地球自转速度变快时,这里也有可能是减一秒,即从 23:59:58 直接跳到 00:00:00。但这种情况比较少,大部分情况下,地球自转速度是越来越慢的。
看到了么?我们在开发时经常看到的 UTC,原来是这样来的!
为什么国家授时中心会设立在陕西省?因为陕西省的地理位置处于中国的中部,从这个位置向各地广播时间时,对全国每个地区距离都是相对平均的。
是不是挺有意思?北京时间并不是在北京产生的,而是在陕西省,并与参与世界时间的制定和校准。
计算机如何同步时间?
NTP 如何同步时间? 同步时间时,对正在运行的程序有没有影响?
网络延时 = (t4 - t1) - (t3 - t2) 时间差 = t2 - t1 - 网络延时 / 2 = ((t2 - t1) + (t3 - t4)) / 2
这个计算过程假设网络来回路径是对称的,并且时延相同。
t1 = time.now()
// 时间发生校准
t2 = time.now()
// t2比t1小怎么办?
elapsed = t2 - t1
墙上时钟:通常就是指前面讲到的世界协调时 UTC,校准时间后,可能发生回拨 单调时钟:计算机自启动以后经历的纳秒数,不会回拨
ntpdate:一切以服务端时间为准,「强制修改」本机时间 ntpd:采用「润物细无声」的方式修改本机时间,把时间差均摊到每次小的调整上
总结
后记
好文推荐
网传京东某程序员因压力太大,在商品页面置入骂人代码!京东辟谣:不关我们的事,外部商家干的!
某大厂程序员炫耀:来新加坡后,每天最多工作五六个小时,家庭年收入150万人民币,已躺平!
女学霸考692分想当“程序媛”,网友:快劝劝孩子
一键三连「分享」、「点赞」和「在看」
技术干货与你天天见~
评论