漫畫:什么是 “千年蟲” 問(wèn)題?
在20世紀(jì)末,人類社會(huì)曾經(jīng)遭遇過(guò)一場(chǎng)空前的大危機(jī),如果這場(chǎng)危機(jī)真的降臨,甚至有可能終結(jié)整個(gè)人類文明。
后來(lái),在全世界精英們共同努力之下,這場(chǎng)危機(jī)終于得以化解。
這場(chǎng)危機(jī)既不是地震,也不是海嘯,更不是瘟疫大流行,而是電子計(jì)算機(jī)帶來(lái)的“千年蟲”問(wèn)題。
千年蟲問(wèn)題,到底是怎么來(lái)的呢?
說(shuō)到這個(gè)問(wèn)題,就不得不提起一位偉大的程序媛小姐姐,Grace Murray Hopper。
說(shuō)起這位小姐姐,那可真是厲害了,她是美國(guó)海軍準(zhǔn)將,也是一位計(jì)算機(jī)科學(xué)家。
Grace Murray Hopper都取得過(guò)哪些成就呢?
她發(fā)明了最早的現(xiàn)代編譯器:A-0系統(tǒng)。
她創(chuàng)造了最早的商用編程語(yǔ)言:COBOL。
她在出故障的計(jì)算機(jī)里發(fā)現(xiàn)了一只飛蛾,使得Bug與Debug成為了計(jì)算機(jī)領(lǐng)域的流行詞匯。
在上世紀(jì)60年代,計(jì)算機(jī)的存儲(chǔ)資源非常稀缺,程序員在編寫每一行代碼的時(shí)候,都要為存儲(chǔ)的使用而精打細(xì)算。
為了更好的節(jié)約內(nèi)存空間,Grace Murray Hopper采用了6位數(shù)字的組合來(lái)存儲(chǔ)時(shí)間信息。比如1965年7月23日,對(duì)應(yīng)存儲(chǔ)形式就是65/07/23,省去了前面的“19”。
這樣的存儲(chǔ)形式,很快就在計(jì)算機(jī)領(lǐng)域流傳開來(lái)。盡管它節(jié)約了一定的存儲(chǔ)成本,卻埋下了兩個(gè)隱患:
1. 由于年份只保留了后兩位,當(dāng)2000年到來(lái)的時(shí)候,年份存儲(chǔ)的信息是“00”,計(jì)算機(jī)無(wú)法區(qū)分這到底是1900年,還是2000年。
2. 1900年不是閏年,但2000年是閏年,如果年份的前兩位被默認(rèn)為“19”,那么2000年的2月29日就會(huì)被當(dāng)做3月1日,存儲(chǔ)為00/03/01。
這兩大隱患,都是到了2000年才會(huì)爆發(fā)出來(lái),所以這個(gè)問(wèn)題被稱為“千年蟲”問(wèn)題,英文縮寫為Y2K。
1.抓住重點(diǎn)
既然全量的程序改不過(guò)來(lái),那就重點(diǎn)修改那些起到核心作用的程序,比如醫(yī)療、航空、金融、軍事領(lǐng)域的程序,這樣工作量就減少了許多。
2.修改時(shí)間窗口
對(duì)于大多數(shù)不那么核心的程序,程序員們想出了一個(gè)取巧的方式,這種方式叫做windowing,翻譯過(guò)來(lái)就是時(shí)間窗口。
這種方法暫時(shí)保留了6位時(shí)間表達(dá),但是表達(dá)的時(shí)間范圍不再是默認(rèn)的1900年-1999年,而是1920年-2019年。
比如,程序當(dāng)中的“10”年,以前默認(rèn)代表著1910年,現(xiàn)在代表著2010年。
這個(gè)做法大大降低了修改成本,但是沒有根本解決問(wèn)題,而是把問(wèn)題的爆發(fā)推遲了20年。
非洲岡比亞,一些政府機(jī)構(gòu)的軟件系統(tǒng)臨時(shí)癱瘓了。岡比亞政府特意宣布當(dāng)天(周一)為非工作日,以暫時(shí)減輕出事機(jī)關(guān)所要承受的壓力。
中國(guó)廣州,某商務(wù)公司的7臺(tái)電腦接二連三出現(xiàn)故障,當(dāng)他們向軟件供應(yīng)商公司求助時(shí)發(fā)現(xiàn),那里已經(jīng)接到100多家公司數(shù)據(jù)庫(kù)癱瘓的消息。
—————END—————
喜歡本文的朋友,歡迎關(guān)注公眾號(hào)?程序員小灰,收看更多精彩內(nèi)容
點(diǎn)個(gè)[在看],是對(duì)小灰最大的支持!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!