今天, 又在公司內聽到大家爭論 Buffer 與 Cache的差異了, 雖然差不多1個月前, 我們就已經在群組裡面進行過激烈的爭論, 我在網上搜尋了下, buffer 與 Cache 區別, 找到下面這個連結, 給出的解釋比較接近為維基百科上的說法, 抄錄如下, 以為記.
什麼是Cache? 什麼是Buffer? 二者的區別是什嗎?
http://wenda.tianya.cn/wenda/thread?tid=595a1d68b3009fed
Buffer和Cache的區別
buffer與cache操作的對象就不一樣。
buffer(緩衝)是為了提高記憶體和硬碟(或其他I/0裝置)之間的資料交換的速度而設計的。
cache(緩衝)是為了提高cpu和記憶體之間的資料交換速度而設計,也就是平常見到的一級緩衝、二級緩衝、三級緩衝。
cpu在執行程式所用的指令和讀資料都是針對記憶體的,也就是從記憶體中取得的。由於記憶體讀寫速度慢,為了提高cpu和記憶體之間資料交換的速度,在cpu和記憶體之間增加了cache,它的速度比記憶體快,但是造價高,又由於在cpu內不能整合太多整合電路,所以一般cache比較小,以後intel等公司為了進一步提高速度,又增加了二級cache,甚至三級cache,它是根據程式的局部性原理而設計的,就是cpu執行的指令和訪問的資料往往在集中的某一塊,所以把這塊內容放入cache後,cpu就不用在訪問記憶體了,這就提高了訪問速度。當然若cache中沒有cpu所需要的內容,還是要訪問記憶體的。
緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟片段和硬碟的反覆尋道,從而提高系統效能。linux有一個守護進程定期清空緩衝內容(即寫入磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:我這裡有一個ext2的隨身碟,我往裡面cp一個3M的MP3,但隨身碟的燈沒有跳動,過了一會兒(或者手動輸入sync)隨身碟的燈就跳動起來了。卸載裝置時會清空緩衝,所以有些時候卸載一個裝置時要等上幾秒鐘。
修改/etc/sysctl.conf中的vm.swappiness右邊的數字可以在下次開機時調節swap使用原則。該數字範圍是0~100,數字越大越傾向於使用swap。預設為60,可以改一下試試。–兩者都是RAM中的資料。
簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。
buffer是由各種進程分配的,被用在如輸入隊列等方面。一個簡單的例子如某個進程要求有多個欄位讀入,在所有欄位被讀入完整之前,進程把先前讀入的欄位放在buffer中儲存。
cache經常被用在磁碟的I/O請求上,如果有多個進程都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提高系統效能。
轉自 http://www.dbthink.com/?p=579&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+dbthink+%28a+db+thinker%27s+home%29