這個(gè)困擾程序員50年的問(wèn)題,終于要被解決了?
?近日,Google、微軟、facebook 和亞馬遜終于忍不了了,聯(lián)合呼吁廢除閏秒,什么是閏秒呢?閏秒到底做錯(cuò)了什么?為什么各大互聯(lián)網(wǎng)公司想要廢除他呢?
什么是閏秒?
閏秒概念是 1972 年提出的,之所以有這個(gè)概念,主要是因?yàn)橛捎诔毕茸匀滑F(xiàn)象的影響,地球的自轉(zhuǎn)速度并不是恒定的。
所以,每隔一段時(shí)間世界標(biāo)準(zhǔn)時(shí)間「協(xié)調(diào)世界時(shí)(UTC)」會(huì)依據(jù)地球圍繞太陽(yáng)運(yùn)動(dòng)計(jì)算的「世界時(shí)(UT)」之間出現(xiàn)小的偏差。
所以就需要對(duì)協(xié)調(diào)世界時(shí)進(jìn)行調(diào)快或者撥慢1秒來(lái)消除這個(gè)偏差。
閏秒分為正閏秒和負(fù)閏秒,正閏秒表示需要在UTC中插入1秒,負(fù)閏秒表示需要在UTC中減少1秒。
閏秒的發(fā)生
當(dāng)科學(xué)家們發(fā)現(xiàn)”哎呀、今年的地球轉(zhuǎn)的有點(diǎn)快呀,趕緊加一個(gè)閏秒來(lái)校正一下吧“,這個(gè)時(shí)間就會(huì)發(fā)生”正閏秒”。
當(dāng)閏秒發(fā)生時(shí),就需要通過(guò)網(wǎng)絡(luò)時(shí)間協(xié)議NTP (Network time protocol)來(lái)進(jìn)行時(shí)間同步,NTP服務(wù)器會(huì)一級(jí)一級(jí)地下發(fā)閏秒事件通知直到最邊緣的NTP服務(wù)器,然后NTP服務(wù)器就會(huì)把閏秒通知發(fā)給客戶端的操作系統(tǒng),由操作系統(tǒng)來(lái)處理閏秒通知。
如果你的計(jì)算機(jī)系統(tǒng)沒(méi)有開(kāi)啟NTP服務(wù),那么導(dǎo)致的問(wèn)題就是你的計(jì)算機(jī)上的機(jī)器時(shí)間就會(huì)比世界時(shí)間慢1秒。
如果開(kāi)了NTP服務(wù)的話,就需要操作系統(tǒng)來(lái)處理這個(gè)閏秒。
閏秒的處理
一般來(lái)說(shuō),閏秒的調(diào)整一般被安排在6月30日或者12月31日,一般會(huì)調(diào)整在最后一分鐘,也就是說(shuō),某一年的6月30日的11:59分有61秒。那么計(jì)算機(jī)系統(tǒng)會(huì)如何處理這個(gè)閏秒呢?
一般有以下幾種方式,如:
- 直接顯示23:59:60這樣的時(shí)間。
- 顯示兩次23:59:59這個(gè)時(shí)間。
- 把這一秒平均分到最后一分鐘的每一秒鐘,也就是11:59還是有60秒,但是每一秒的時(shí)長(zhǎng)是1+1/60 秒。
不同的操作系統(tǒng),不同操作系統(tǒng)的不同版本,都會(huì)有不同的處理方式,所以我們的代碼就需要有足夠的魯棒性來(lái)兼容這些閏秒的處理方式,如果沒(méi)有做好兼容,那么就會(huì)發(fā)生各種各樣的問(wèn)題。
如需要兼容對(duì)23:59:60的處理;如操作會(huì)出現(xiàn)兩次23:59:59,這對(duì)于一些對(duì)時(shí)間有精確的強(qiáng)依賴的程序來(lái)說(shuō),可能就會(huì)導(dǎo)致致命的問(wèn)題,尤其是一些依賴時(shí)間戳的服務(wù)或者工具。
閏秒的危害
50年來(lái),閏秒已經(jīng)出現(xiàn)過(guò)27次,每一次出現(xiàn)都是一片”哀鴻遍野”,如:
2012 年 7 月 1 日零點(diǎn), Reddit、Mozilla、領(lǐng)英、Yelp 和 Amadeus 等網(wǎng)站宕機(jī)數(shù)十分鐘。
2015 年 7 月 1 日零點(diǎn),全球約 2000 個(gè)計(jì)算機(jī)網(wǎng)絡(luò)突然短暫中斷;美國(guó)洲際交易所被迫中止交易 61 分鐘。
2017 年 1 月 1 日零點(diǎn),Cloudflare 等云服務(wù)廠商服務(wù)突然崩潰。
因?yàn)殚c秒的發(fā)生是受自然現(xiàn)象影響的,所以他完全無(wú)法預(yù)測(cè)也沒(méi)有任何規(guī)律。對(duì)于程序員來(lái)說(shuō),這種無(wú)規(guī)律的事情,每次發(fā)生都需要進(jìn)行一次特殊處理,而每一次特殊處理都可能要付出慘痛的代價(jià)。
所以,這些國(guó)際大廠終于忍不了站出來(lái)呼吁廢除閏秒了,作為一個(gè)程序員,我舉雙手+雙腳贊成!
參考資料:
- https://www.qbitai.com/2022/07/36387.html
- https://www.163.com/dy/article/HD9ESP2T0531M1CO.html?f=post2020_dy_recommendshttps://os.51cto.com/article/345796.html
- https://info.support.huawei.com/infofinder/encyclopedia/zh/NTP.htmlhttps://www.zhihu.com/question/27500849https://qa.1r1g.cn/unix/ask/23322561