淺談緩存

此文是看到駁:《緩存黃金原則:讓數據更靠近CPU》一文有感而發。

爲什麼要緩存,什麼是緩存

先假設一個簡化的場景——CPU要讀取一段數據,此場景涉及以下東西:

CPU、CPU緩存、內存、外存(硬盤等)。

請看CPU讀取數據的流程圖:

(圖一)

從圖上看,如果CPU要訪問的數據保存在外存中,那麼頻率爲1G的CPU訪問外存需要的時間最少也要20000000(週期) X 1/1000000000 (秒/週期) = 1毫秒,相對於人的感覺來說挺快了,但是相對訪問高速緩存就是雲泥之別……此時內存中如果保存了CPU需要訪問的數據的話,那麼就可以省掉訪問外存這一步,節省了大量時間,這就是爲什麼要緩存的原因,此時內存就緩存來自外存的數據,以此類推,較高級的存儲器可以緩存其下級存儲器的數據。

 

其實從上圖已經可以看出爲什麼讓數據離CPU更近是黃金法則了,接下來再舉個具體的基於web的例子從更宏觀的角度說一下,請看圖:

(圖二)

客戶端需要讀取服務器上的一個頁面,它首先檢查該頁是否曾訪問過了,這個檢查過程就跟圖一一樣需要訪問本地的存儲設備(此時本地存儲器變成了網絡的緩存),如果否的話,那就要訪問網絡,經過漫長的等待(網速不給力啊……)終於取回需要的頁面了,到目前爲止,你是不是真心希望要是頁面在本機的高速緩存裏該多好,那速度絕對剛剛的。

剛纔只簡單的說了訪問網絡,現在我們放大訪問網絡這個過程的細節:

首先忽略網絡傳輸這個過程,因爲這個一直很慢,而且不是我等挨踢民工可以控制的,只需要知道這個過程需要消耗相當多的時間就行了。

到了服務器端,服務器的CPU需要從它的存儲器中讀取這個頁面,然後向網絡設備寫入傳送給客戶端,此時你是不是又發現如果這個頁面被緩存在服務器中高層次的緩存裏貌似能節省不少時間……

在web場景下,那句“緩存黃金原則:讓數據更靠近 CPU。”主要指服務器端的CPU,那是因爲開發者對客戶端緩存只有很小的影響,而服務器端的緩存是可以完全控制的。

 

補充一下:需要更多細節,想完全搞懂緩存機制的兄弟,可以去看看《深入理解計算機系統》這本書的第六章——存儲器層次結構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章