• 栏目频道
程序员必看知识:计算机时间到底是怎么来的?
作者: 来源: 发布时间:2021-10-04 15:23:47 访问量:724

关于时间的问题还有很多,例如:

为什么计算机的时间有时候会‘走不准’?

计算机究竟是怎么‘自动校准’时间的?

我们经常看到的 UTC 时间,到底是什么?

我们在新闻上看到的‘北京时间’,真的来自北京吗?等等

这篇文章,就来揭秘时间背后的秘密,希望你可以耐心读完。

时间为什么总是走“不准”?


正如家里买了一个钟表,时间一长,就会发现它走得‘不准了’。又或者,一台长时间不使用的电脑,它的时间也会发生偏差。遇到这些情况可能会不以为然,一般都会“人工”调准它们。钟表和计算机内部都有一个叫做“晶体振荡器”的东西,给它加上电压,它就会以固定的频率振动。但这个振动频率的“稳定性”,取决于它的制造工艺,以及外界环境的影响。出于成本的考虑,钟表的制作工艺没那么高,所以它更容易有误差。而电脑制造工艺虽然比较高,但它内部的晶体振荡器也会受到“温度”变化带来的影响,在工作过程中,也会有产生误差。虽然它们的误差很小,但日积月累下来,误差就越来越明显。

如何校准时间?


很简单,只要把电脑连上了“网络”,就会发现它会自动与“网络时间”保持同步。

     可问题是,这个“网络时间”哪儿来的?是每台电脑肯定配置了一个“时间服务器”,之后这台电脑会与服务器定时同步,自动校准吗?没错,确实是这样,不光是电脑,我们平时使用的手机、平板、智能手表等电子设备,只要能连接网络,都会自动同步网络时间。

理论来讲,它应该也是一台计算机,难道它不会遇到我们前面说的问题吗?

此外,这个网络时间究竟是怎么“同步”到我们的电脑上的?这可能会联想到是通过网络数据包。问题又来了,网络传输数据也是有“延迟”的,同步服务器时间,不还是存在误差吗?环环相扣,像一个俄罗斯套娃,很难解释清楚。要想彻底搞清楚这些问题,就要深入到时间的“源头”来寻找答案。

时间是怎么来的?


聪明的人们就想到,把一年内所有天的时长加起来,然后求“平均”,得到相对固定的“天”,然后再计算得出“相对平均”的秒,这样就减小了误差。确定了天文规律,人们开始制造“钟表”,把时间表示出来。从摆钟到机械钟,再到现代广泛使用的石英钟,钟表的制作工艺越来越高,时间精度也越来越高,现代石英钟每天的计时误差只有“千分之一秒”。

所以,在 1927 年,人们以基于“天文现象”+“钟表计时”,确立了第一套时间标准:世界时(Universal Time,简称 UT)。

现在,科学家制定出了两套时间标准:


世界时:基于天文现象 + 钟表计时,永远与地球自转时间相匹配

国际原子时:基于原子钟计时,每一秒的周期完全等长且固定

    这一套“新的时间标准”,这套时间以“原子时为基准”,开始计时,走的每一秒都是稳定、精确的。同时,为了兼顾基于天文测量的世界时,人类会“持续观测”世界时与这个新时钟的差距。如果发现两者相差过大时,我们就“人为”地调整一下这个时钟(加一秒或减一秒),让两者相差不超过 0.9 秒。但这个时钟本身比世界时走得快,经过一段时间后,如果发现两者相差越来越大,那就给这个时钟“加一秒”,让这个时钟在 23:59:59 的下一秒变为 23:59:60 秒,让它与世界时差距控制在 0.9 秒以内,这个操作过程,相当于让快的时钟稍微“等”一下走得慢的世界时。而增加的这一秒,科学家把它定义为“闰秒”。


由于这个时钟是基于原子时+世界时“协调”得出的,所以科学家们把它定义为协调世界时(Coordinated Universal Time,简称 UTC)。


看到了么?我们在开发时经常看到的 UTC,原来是这样来的!

有了这个研究成果,有技术能力的国家都纷纷制造自己的原子钟,然后计算协调世界时。

为了进一步降低原子钟的测量误差,每个国家会在每个月,统一上报自己计算的世界协调时到一个权威机构,然后这个权威机构会根据各国实验室的精度,进行加权计算,算出最终的协调世界时。

之后,再把这个最终的时间下发到各个国家,让各个国家进行“对表”校准,保证全世界的时间误差在 100 纳秒以内。

     至此,科学家们建立的这套时间标准,就是我们现在沿用至今的“标 准 时 间”!

值得一提的是,配合计算世界协调时的国家,也有中国,这个实验室就是“中国科学院国家授时中心”,它位于中国的陕西省渭南市蒲城县,持续维护中国的标准时间。

之后,中国会在自己算出的世界协调时的基础上,再加 8 个小时(中国在东八区),最终得出来的时间,就是“北 京 时 间”!至此,全新的世界标准时间确立了,这套时间标准于 1972 年正式确定,一直沿用至今。

计算机如何同步时间?

位于陕西省的中国科学院国家授时中心,产生北京时间后,会通过一系列方式,把这个时间广播出去,这个过程,就叫做“授时”。国家授时中心提供很多授时方式,例如无线电波、网络、电话,都可以把时间广播出去。

这一套“新的时间标准”,这套时间以“原子时为基准”,开始计时,走的每一秒都是稳定、精确的。同时,为了兼顾基于天文测量的世界时,人类会“持续观测”世界时与这个新时钟的差距。如果发现两者相差过大时,我们就“人为”地调整一下这个时钟(加一秒或减一秒),让两者相差不超过 0.9 秒。但这个时钟本身比世界时走得快,经过一段时间后,如果发现两者相差越来越大,那就给这个时钟“加一秒”,让这个时钟在 23:59:59 的下一秒变为 23:59:60 秒,让它与世界时差距控制在 0.9 秒以内,这个操作过程,相当于让快的时钟稍微“等”一下走得慢的世界时。而增加的这一秒,科学家把它定义为“闰秒”。

通常来说,无线电波的传播速度更快、传播误差小,所以授时中心会通过这种方式,把时间发送给全国各地的“时间服务器”。时间服务器有了准确的时间后,再通过其它方式(例如网络)广播到下一层的终端用户使用。

当计算机在做时间校准时,也需要把网络延迟计算进去,最后“修正”这个同步过来的时间,降低误差。现在,已经有个软件已经把这一切都做好了,如果你了解一些运维相关的工作,就会知道,我们部署应用程序的服务器上,都会启动一个“自动校准”时间的服务,这个服务就是 NTP(Network Time Protocol),它可以保证每台机器的时间与时间服务器保持同步。

<返回上一页

分享到微博 分享到QQ好友 分享到QQ空间 复制链接