漫畫:什麼是 「千年蟲」 問題?

在20世紀末,人類社會曾經遭遇過一場空前的大危機,若是這場危機真的降臨,甚至有可能終結整我的類文明。php

後來,在全世界精英們共同努力之下,這場危機終於得以化解。
程序員

這場危機既不是地震,也不是海嘯,更不是瘟疫大流行,而是電子計算機帶來的「千年蟲」問題。數據庫

千年蟲問題,究竟是怎麼來的呢?編程

說到這個問題,就不得不提起一位偉大的程序媛小姐姐,Grace Murray Hopper。編程語言

提及這位小姐姐,那可真是厲害了,她是美國海軍准將,也是一位計算機科學家。
翻譯

Grace Murray Hopper都取得過哪些成就呢?
code

她發明了最先的現代編譯器:A-0系統。內存

她創造了最先的商用編程語言:COBOL。資源

她在出故障的計算機裏發現了一隻飛蛾,使得Bug與Debug成爲了計算機領域的流行詞彙。編譯器

在上世紀60年代,計算機的存儲資源很是稀缺,程序員在編寫每一行代碼的時候,都要爲存儲的使用而精打細算。

爲了更好的節約內存空間,Grace Murray Hopper採用了6位數字的組合來存儲時間信息。好比1965年7月23日,對應存儲形式就是65/07/23,省去了前面的「19」。

這樣的存儲形式,很快就在計算機領域流傳開來。儘管它節約了必定的存儲成本,卻埋下了兩個隱患:

1. 因爲年份只保留了後兩位,當2000年到來的時候,年份存儲的信息是「00」,計算機沒法區分這究竟是1900年,仍是2000年。

2. 1900年不是閏年,但2000年是閏年,若是年份的前兩位被默認爲「19」,那麼2000年的2月29日就會被當作3月1日,存儲爲00/03/01。

這兩大隱患,都是到了2000年纔會爆發出來,因此這個問題被稱爲「千年蟲」問題,英文縮寫爲Y2K。



1.抓住重點

既然全量的程序改不過來,那就重點修改那些起到核心做用的程序,好比醫療、航空、金融、軍事領域的程序,這樣工做量就減小了許多。

2.修改時間窗口

對於大多數不那麼核心的程序,程序員們想出了一個取巧的方式,這種方式叫作windowing,翻譯過來就是時間窗口。

這種方法暫時保留了6位時間表達,可是表達的時間範圍再也不是默認的1900年-1999年,而是1920年-2019年。

好比,程序當中的「10」年,之前默認表明着1910年,如今表明着2010年。

這個作法大大下降了修改爲本,可是沒有根本解決問題,而是把問題的爆發推遲了20年。

非洲岡比亞,一些政府機構的軟件系統臨時癱瘓了。岡比亞政府特地宣佈當天(週一)爲非工做日,以暫時減輕出事機關所要承受的壓力。

中國廣州,某商務公司的7臺電腦連續不斷出現故障,當他們向軟件供應商公司求助時發現,那裏已經接到100多家公司數據庫癱瘓的消息。


—————END—————

喜歡本文的朋友,歡迎關注公衆號 程序員小灰,收看更多精彩內容

‍‍‍‍‍點個[在看],是對小灰最大的支持!
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息