大部分程序員都搞錯(cuò)了,硬盤真的很慢么?
緩存是每個(gè)程序員所熟知的,相信大家對(duì)緩存都已經(jīng)不陌生了,緩存使用傳輸更快的介質(zhì)來(lái)存儲(chǔ)更加頻繁讀寫的數(shù)據(jù)。在程序員面試中,我們常常會(huì)這樣回答,因?yàn)橛脖P的讀寫速度太慢,事實(shí)真的是如此么?
雖然現(xiàn)在已經(jīng)又SSD硬盤,但是由于SSD硬盤價(jià)格昂貴,在服務(wù)器領(lǐng)域,機(jī)械硬盤還是橫行霸道,所以,今天我們討論的,是機(jī)械硬盤。這十幾年來(lái),硬盤的容量已經(jīng)翻了好幾番,我記得我讀書那會(huì),能夠配一個(gè)128G的硬盤已經(jīng)非常奢侈了,而今天,家用的電腦基本都是TB級(jí)別起步的了。但是硬盤的讀寫速度并沒(méi)有多大的提升,這很大程度是與硬盤的結(jié)構(gòu)息息相關(guān)的。在一個(gè)機(jī)械硬盤里面,要完成數(shù)據(jù)讀寫,需要經(jīng)歷這三步:尋道、旋轉(zhuǎn)、數(shù)據(jù)讀取。
尋道
我們的機(jī)械硬盤,就像一個(gè)大圓餅一樣,數(shù)據(jù)是一圈一圈地存在,讀取數(shù)據(jù)地時(shí)候,需要將探頭旋轉(zhuǎn)到對(duì)應(yīng)的磁道,這是一個(gè)機(jī)械運(yùn)動(dòng)的過(guò)程,盡管現(xiàn)在的探頭越來(lái)越精致,速度越來(lái)越快,學(xué)過(guò)物理的同學(xué)都知道,從靜止的物體運(yùn)動(dòng)起來(lái)跟加速度這些都有關(guān)系,考慮到探頭的耐用性,無(wú)法太快,現(xiàn)在的大部分磁盤尋道時(shí)間都要花2ms到15ms。
旋轉(zhuǎn)
當(dāng)我們把探頭調(diào)整到對(duì)應(yīng)磁道之后,還需要去對(duì)應(yīng)的地方去獲取數(shù)據(jù)。我們的每一個(gè)磁道的數(shù)據(jù)都是一個(gè)大圓圈,所以需要旋轉(zhuǎn)硬盤到合適的位置。旋轉(zhuǎn)的耗時(shí)取決于旋轉(zhuǎn)的轉(zhuǎn)速,這就是市面上我們經(jīng)??吹降拇疟P轉(zhuǎn)速參數(shù),5400轉(zhuǎn)或者7200轉(zhuǎn)甚至更高,一般5400轉(zhuǎn)的硬盤,也需要4ms左右才能旋轉(zhuǎn)到對(duì)應(yīng)的扇區(qū)。

數(shù)據(jù)讀取
數(shù)據(jù)讀取其實(shí)非常的快,快到可以忽略不記。
隨機(jī)讀寫與順序讀寫
綜上所述,一個(gè)機(jī)械硬盤,如果要讀寫的數(shù)據(jù)不在對(duì)應(yīng)的磁道上,那么最少也要花費(fèi)5ms去跑到對(duì)應(yīng)的地址,所以,我們常說(shuō)的,機(jī)械硬盤速度慢,更多的是特指機(jī)械硬盤在隨機(jī)讀寫的速度慢。為了更好的利用磁盤,完成更大的吞吐,在很多大型的系統(tǒng),都會(huì)使用追加寫來(lái)減少磁盤的尋道跟旋轉(zhuǎn)次數(shù)。例如由領(lǐng)英著名的消息隊(duì)列卡夫卡,或者谷歌開(kāi)源的存儲(chǔ)系統(tǒng)LevelDB,都是使用追加寫數(shù)據(jù)來(lái)達(dá)到更大的性能。
事實(shí)上,硬盤的順序讀寫速度非常地快,我們常說(shuō)的慢,指的是隨機(jī)讀寫,你學(xué)到了嗎?歡迎大家關(guān)注我,共同學(xué)習(xí),共同進(jìn)步。大家的支持是我繼續(xù)嘮嗑的動(dòng)力。