快取與緩衝

codecraft發表於2016-12-03

快取的思想由來已久,簡單地說,快取的目的就是把需要花費昂貴開銷的計算結果儲存起來,在以後需要的時候直接取出,而避免重複計算,一切快取的本質都是如此。計算機乃至網際網路,快取的應用數不勝數,我們都知道CPU快取,它是位於CPU和記憶體之間的臨時儲存器,它的容量不大,但是交換速度要高於記憶體,CPU將頻繁交換的資料放在快取中,如果以後需要則直接讀取快取,從而避免訪問速度較慢的記憶體,不可否認,儘管我們認為記憶體速度已經很快,但是在CPU快取面前,它還是力不從心。

緩衝(buffer)。緩衝的原意出自物理學,那就是減緩衝擊力,在計算機應用場景中,我們使用它的引申含義,其目的在於改善各部件之間由於速度不同而引發的問題。比如將使用者態地址空間的資料寫入磁碟時,顯然記憶體的速度比磁碟速度要快得多,所以人們設計了磁碟緩衝區,讓資料來源源不斷地流進緩衝區,再由緩衝區負責寫入磁碟,這樣記憶體便可以不必隨著磁碟的慢節奏來工作,所以磁碟緩衝區起到了將快速裝置和慢速裝置平滑銜接的作用,另外我們線上觀看視訊的時候,視訊緩衝區的意義也是如此。

緩衝和快取有一些相似之處,比如它們都需要一塊儲存區,而且它們的本質都與速度不一致有關,即便是快取,如果計算速度和讀取快取的速度差不多,那麼它也毫無意義。但是,快取更加註重的是策略,也就是說快取命中率,如果每次都能在快取中找到需要的資料,那是最理想的結果,如果每次都在快取中找不到需要的資料,那麼快取將變得毫無價值,並且還由於快取的管理邏輯增加了新的開銷。所以凡是使用快取,都一定要意識到命中率的重要性。

相關文章