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