buffer和cache的區別是什么?


【總結】

概念:cache和buffer都是內存模塊,只是作用不同所以名稱不同,主要是為了解決磁盤IO慢的問題,借用內存來儲存磁盤IO需要的數據。

 

一句話的描述:

buffer就是記錄修改的信息,用於系統寫入數據到磁盤。

cache就是記錄磁盤的信息,用於系統從磁盤讀數據。

 

在操作系統中的角色:

  buffer:即 os =》修改操作想要落地到盤 =》先全部記錄到 buffer =》根據壓力和同步策略 批量持久化到磁盤(避免小而多的頻繁寫入磁盤,前面說了磁盤寫入比內存操作慢多了)

  cache:即 os =》想要讀取一個文件 =》先去cache內存里面看有沒有 =》沒有則讀取硬盤上的文件內容到 cache,有則直接讀cache內存(避免小而多的頻繁讀磁盤,前面說了磁盤讀比內存操作慢多了)

 

在數據庫里面的角色:

   buffer就是臟頁、索引緩存頁,定時根據數據庫/os 策略來批量落盤臟頁,避免小而多的頻繁寫入磁盤。

  cache 就是查詢緩存/數據緩存,以減少回表次數。

 

在free命令展示機器的內存消耗情況,會像這樣展示

 

 

 

 

buffered 和cached本質內容有什么區別呢?

 

 我沒搞明白。我覺得需要追根溯源會更加理解本質。

 

英文是這樣解釋

 

A buffer is something that has yet to be "written" to disk.  這些數據准備寫到磁盤的,但還沒有寫到磁盤,緩存在內存中。

 

 

之所以有這樣的機制,因為頻繁地寫入磁盤,會造成磁盤i/0,所以一般數據不會馬上寫入到磁盤去,而是定期積累到一定量后寫入磁盤去。

buffer的英文本意是緩沖器,緩沖一下,不要馬上寫入到磁盤,沖擊磁盤。

 

這個buffer大小由什么設置的呢? 不知道。待補充。

 

 

A cache is something that has been "read" from the disk and stored for later use.

從磁盤上讀取數據存儲到內存中緩存起來,方便下一次使用。目的是避免頻繁的去磁盤上讀取數據,直接從內存中讀取使用了。

之所以有cache,一般是對頻繁使用到的數據(讀的數據),進行緩存到內存。

 

 

------------------------------------------

從上面分析看,兩個內存區域要解決的問題和目標都不同。一個是解決頻繁讀的問題。另外一個是解決頻繁寫入到磁盤的問題。

 

但相同點是:他們都是為了減少磁盤i/0次數。因為磁盤是機械性的旋轉,靠磁頭定位來讀、寫數據。頻繁讀、寫磁盤,就會造成磁頭頻繁定位,這個就是磁盤i/0(數據庫系統的實現里面有磁盤的原理介紹,然后專門講解實現一個數據庫系統如何針對磁盤做優化)

 

 

free命令中的used項(已經使用的內存),其實是已經包含了buffer和cache部分。

根據上面對buffer和cache的分析,buffer和cache部分實際上是可以拿來使用的內存區(都是緩存數據,釋放掉這部分內存空間並不影響)

正因為這樣,為了想要准確得知到底有多少可用的內存,linux的free命令,會第二列專門給出減去buffer和cache部分的統計結果來看。

 

第二列 :-/+ buffers/cache

 

顯示兩個值,第一個值,是used-buffers-cache的計算結果。第二個值 是used+buffers+cache的計算結果

 

 

 

思考

從操作系統角度來看,它只關注真正的物理內存剩余多少。所以buffer區域和cache區域它也認為不是剩余的。這沒有錯。操作系統關注是物理內存真實有多少。

 

而應用程序角度來看,它關注的是有多少物理內存是自己可以調用的。它認為buffer和cache部分也是可以拿過來用的。也沒有錯誤。

 

現實中例子用什么來形象化描述呢?

 

一個人有多少錢,站在不同的角度算法不一樣。

 

有人存款10萬。我們只是看它真實錢有多少。那就是10萬(操作系統這么認為)

而從另外一個角度,他有房子,如果需要,房子可以賣掉,賣成錢,估算一下價格。假設房子80萬,那么他的錢就是80+10=90萬(應用程序這么認為)

 

兩個計算方式都沒有錯。角度不同。

 

buffer和cache,對於應用程序而言,覺得這部分是可以回收的(我需要的時候隨時可以用。房子隨時可以套現拿到錢使用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM