buffer和cache有什麼本質區別

 

在free命令展現機器的內存消耗狀況,會像這樣展現linux

 

 

 

 

buffered 和cached本質內容有什麼區別呢?算法

 

 我沒搞明白。我以爲須要追根溯源會更加理解本質。數據庫

 

英文是這樣解釋緩存

 

A buffer is something that has yet to be "written" to disk.  這些數據準備寫到磁盤的,但尚未寫到磁盤,緩存在內存中。優化

 

 

之因此有這樣的機制,由於頻繁地寫入磁盤,會形成磁盤i/0,因此通常數據不會立刻寫入到磁盤去,而是按期積累到必定量後寫入磁盤去。spa

buffer的英文本意是緩衝器,緩衝一下,不要立刻寫入到磁盤,衝擊磁盤。操作系統

 

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

 

 

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

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

之因此有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,對於應用程序而言,以爲這部分是能夠回收的(我須要的時候隨時能夠用。房子隨時能夠套現拿到錢使用)

相關文章
相關標籤/搜索