新手程式設計師都有一種痛叫: “你能幫我推薦一款電腦嗎? ”
“程式員雖然寫程式碼,但是不會修電腦;就像范冰冰雖然演電視,但是不會修電視一樣”。
程式設計師,真的被誤會了。

329.jpg
不過呢?
每當收到一些剛開始學習程式設計,正在學習程式設計的,或者已經工作的新手程式設計師讀者們讓我幫忙選電腦的請求時,我還是認真地回答。
可是每當我答到記憶體、CPU、SSD的時候,很多童鞋又不懂。其實個人覺得,在資訊時代,人人都應該掌握一些計算機組成和體系結構的知識,特別是相關專業的童鞋。
所以,我決定以後咱們有空的時候也講講計算機組成。
今天,我們就先聊一聊硬碟吧。
1
磁碟原理及筆記本防壞指南
千萬別沒事開著機就端著你的膝上型電腦到處走動,很容易壞的!
膝上型電腦和臺式電腦相比有一個很大的缺點,就是硬碟容易壞(HDD-機械硬碟),因為膝上型電腦需要經常移動,容易把硬碟給震著,但這好像也是筆記本的優點吧。
為什麼筆記本的硬碟容易壞?
那我們就得先了解機械硬碟的構造。在介紹硬碟之前先來介紹一下留聲機。相信大家都在電視上見過下圖中的這個玩意,它叫留聲機,是偉大的發明家愛迪生先生於1877年發明的。

image.png
它的原理其實很簡單,碟片上有很多凹槽,當指標和凹槽接觸的時候,針尖隨凹槽波動而輕微地振動,從而轉化為聲音,大家就可以聽到美妙的音樂了。
其實計算機磁碟也是這個道理,如下圖是一個拆開的磁碟,可以看到,磁碟上也有一個讀寫頭。

image.png
和留聲機不同的是,讀寫頭和光盤面是不接觸的,他們之間通過磁性來傳遞資訊。也就是說,磁碟是用磁介質來儲存資訊的。
如果你經常聽見你的膝上型電腦內部有什麼東西在細微震動,那多半就是你的磁碟在飛速轉動。
此外,磁碟並不是像上圖那樣只有一面,如果誇張地把磁碟內部結構放大,它應該是下面這個樣子的:

image.png
這樣一個看起來薄薄的磁碟其實一共有n張光碟共2n個面,每個面都可以記錄資訊。如下圖中的左半部分所示。
每個盤面都有一組被稱為磁軌的同心圓,就如下面的磁軌0、磁軌1等等;每一個磁軌又被劃分為一組扇區。(這裡很多同學可能會理解錯誤,扇區指的不是那個扇形,而是那一小段圓弧)。
扇區與扇區之間有一些間隙,把扇區隔開。

image.png
每個扇區都可以儲存數量相等的資料位,通常是512位元組。前面加粗的字不知道大家有沒有發現不對勁的地方?
對於圓弧形的扇區來說,越靠近圓心的圓弧就越短。既然每個扇區的磁軌長短不一,為什麼還儲存著同樣大小的資訊呢(通常是512位元組)?
沒辦法,就是這麼蛋疼。在講這個蛋疼的事情之前,我們還需要再瞭解一下柱面。柱面指的是所有盤面到主軸距離相等的同心圓的集合。可以參考上圖右面的那個示意圖,比如圖中有4個光碟,8個盤面,那麼一個柱面就由8個同心圓磁軌構成。
好了,講了柱面我們繼續講剛剛那個蛋疼的事情。
從上圖左邊的示意圖可以看出,無論是靠近圓心的磁軌還是最外圈的磁軌,都被分割成了數量相等的扇區,並且每個扇區儲存的資料量是一樣的。
這樣就會造成,靠內的扇區之間間隔很小,而越往外扇區之間的間隔就越大,如果非要用一句人話來描述就是:越往外,磁軌記錄資訊的密度就越低。
扇區數目是由最靠內的磁軌能記錄的扇區數來決定的,這就是最坑的地方,最裡面的磁軌能劃分為多少個扇區,那麼最外層的磁軌就必須存多少個扇區。十分浪費,當然,人類肯定不能一直這樣設計。
後來有一種新的技術出現了,就是多區記錄,什麼意思呢?
用大白話說就是,假設一個磁碟有200個同心圓(柱面),之前200個柱面都按最裡面的那個柱面來劃分扇區。
現在的多區技術就是,把200個柱面劃分為x個組,我們這裡就假設成4個組,每個組50個柱面。
第一組的1 50個柱面以第1個柱面為基準劃分扇區;第二組51 100柱面以第51個柱面為基準劃分扇區...以此類推。
這樣就更高效地利用了磁軌的儲存位。

image.png
當計算機開始執行,磁碟也開始飛速轉動,然後讀寫磁頭轉動,就可以在相應的磁軌中讀寫資料了。
講完了原理,我們來講講你的膝上型電腦為什麼容易壞。其實很多同學的筆記本壞了,多數時候都是磁碟壞了,那麼磁碟為什麼這麼容易壞?
因為它轉得實在是太快了。。。給個量化的指標,最外層的磁軌和讀寫頭之間的相對速度(學過物理的都知道線速度和角速度吧,這個自己轉化yy一下)是80km/h。
做個不恰當的比喻,如果地球按這個角速度自轉,那麼地球自轉一週也就需要8秒鐘而已。在這種情況下,我想你絕對會被甩出銀河系,地球也瞬間瓦解。
磁碟在高速運轉的情況下,你拿著它到處走動,讀寫頭很容易和盤面碰到,因為它們僅僅相距0.1微米。一點點小撞擊,就能毀了你的磁碟。
所以,記住了。
電腦開著機的時候少拿著走動,關了機以後再放進書包帶走。當然,如果你的電腦硬碟是固態的,那就請你隨意走動,電腦開著機拿手上跳個廣場舞也沒事。
關於固態硬碟,後面我們慢慢道來。
2
演算法上的優化
為什麼說,程式設計師在知道了計算機底層原理以後能寫出更優秀的程式碼?今天我們就用一個例子來說明。
如果你瞭解一些資料庫的優化演算法,你應該聽說類似的優化策略:隨機讀轉化為順序讀,隨機寫轉化為順序寫。
為什麼要轉化呢?
因為隨機讀寫真的很慢。
磁碟在讀寫資料的時候,時間主要消耗在三個地方。分別是:尋道時間,旋轉時間和傳送時間。
大家只要看了上面的內容,大致應該知道磁碟讀取資料的流程。首先是尋道,也就是傳動臂的讀寫頭要先移動到對應的磁軌上,這個過程所花費的時間叫尋道時間。
找到了磁軌以後還不能馬上讀取資料,還需要找到相應的扇區才能開始讀寫,所以磁碟還要旋轉,把對應的扇區轉動到讀寫頭下方,這個過程所花費的時間叫做旋轉時間。
在找到目標扇區以後,剩下的時間就是傳送時間了,也就是資料的寫入和讀取。
為什麼隨機讀寫慢,順序讀寫快?
答案很明顯,隨機讀寫每次的時間花銷都由上述三部分時間構成;然而順序讀寫省去了前兩部分時間。
看到這裡,你已經可以裝逼地給別人講一下,為什麼有一類演算法要把隨機讀寫轉化成順序讀寫。
3
一塊SSD拯救了我的電腦,也就是固態硬碟。

image.png
我那臺老筆記本在用了4年後,有點扛不住了,所以我買了一塊250GB的固態硬碟給換上,再自己加了一塊4GB的記憶體,然後給它裝上了一個Ubuntu系統(Linux),感覺它就像迎來了新生。我感覺它的效能提升了不只10倍。
這主要歸功於那塊固態硬碟,為什麼固態硬碟這麼牛逼?
因為固態硬碟採用的是快閃記憶體技術,其實你的U盤、手機儲存都是快閃記憶體。
首先,固態硬碟不容易壞,因為固態硬碟中已經沒有那個旋轉的磁碟了,所以即使是開機狀態你拿著它到處走也沒事。
其次,固態硬碟的讀寫速度大約是機械硬碟的5~10倍,對於遊戲玩家和開發者而言,這無疑是一個巨大的改善。
所以我的這臺電腦換了固態硬碟之後,就被我放在家裡裝上各種資料庫做儲存系統了,時不時跑一些任務,效能也是槓槓的。
如果你看到了這裡,相信你已經對硬碟已經有了初步的瞭解,在選購計算機的時候也可以看看相應的引數啦!今天的硬碟就講到這裡,之後有空我們再聊聊其他硬體,比如CPU、記憶體或者是主機板。
這裡推薦一下我的前端學習交流群:784783012,裡面都是學習前端的,如果你想製作酷炫的網頁,想學習程式設計。自己整理了一份2018最全面前端學習資料,從最基礎的HTML+CSS+JS【炫酷特效,遊戲,外掛封裝,設計模式】到移動端HTML5的專案實戰的學習資料都有整理,送給每一位前端小夥伴,有想學習web前端的,或是轉行,或是大學生,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。
點選: ofollow,noindex">加入