Buffer和cache的區別是什麼?

2023-04-27 07:35:25 字數 5786 閱讀 3636

1樓:小柒

buffer和cache是兩個經常被混為一談的概念。從直觀上說,兩者都具備改善系統 i/o 吞吐量的能力,但是這兩個概念是有區別的,其提高系統i/o吞吐量的原因也不盡相同。

cache改善系統效能的主要原因是資料訪問的區域性性,即,通常應用程式在一段時間內操作的資料集的某個有限的部分,通常是很小的一部分。硬體實現的cache通常會只使用一小塊(與主存相比)訪問速度很快,但相對比較昂貴的儲存部件,並放置於距離cpu較近的位置。

buffer改善系統效能的主要原因是減少不必要的狀態切換和裝置i/o。由於製造工藝等個方面的原因,系統中不同部件的速度往往是不一樣的,一次。

進行批量的操作(例如,預先讀取,或者將寫資料湊成一個整數之後再寫),往往要比到需要時等待這些操作完成要節省時間,並且有效地降低狀態切換導致的開銷。

還有一個比較顯著的區別是,cache通常是硬體或os提供,使用者程式不需要(多數情況下也沒有辦法)為其分配儲存的機制,通常它在使用者,如使用者。

程式看來是透明的,它屬於提供cache的一方而不是其使用者;而buffer往往是由使用者程式知道並且與os共享(換言之,使用者程式需要分配一塊記憶體,並告訴os這塊記憶體將要用於某種操作),或由os分配,並在主機和外設之間共享(例如網絡卡的dma

buffer),在使用者看來它通常不是透明的,這些記憶體往往屬於控制記憶體的程式,如使用者程式,或os,而不是向其傳遞資料的os,或硬體。

不過,這個區別主要是傳統意義上的cache。最近幾年引入的一些新概念,特別是internet

cache並不能用這種方法來區分。我認為最關鍵的區別其實在於,buffer主要作用是在於減少實際的i/o操作次數,即,將多次操作儘量合併成一次的。

成批操作,通常其中的資料在操作完成之後,buffer不會被繼續使用;而cache的主要作用在於更好地利用區域性性原理,減少不必要的i/o,避免代價。

buffer和cache的區別

buffer cache與page cache

linux buffer 和cache 區別

2樓:世紀網路

free 的輸出包含了實體記憶體 mem 和交換分割槽 swap 的具體使用情況,比如總記憶體、已用記憶體、快取、可用記憶體等。其中快取是 buffer 和 cache 兩部分的總和 。

其中buffer 和cache 的區別是:

簡單來說,buffer 是對磁碟資料的快取,而 cache 是檔案資料的快取,它們既會用在讀請求中,也會用在寫請求中。

buffer 和 cache 分別快取磁碟和檔案系統的讀寫資料。

磁碟是一個塊裝置,可以劃分為不同的分割槽;在分割槽之上再建立檔案系統,掛載到某個目錄,之後才可以在這個目錄中讀寫檔案。

其實 linux 中「一切皆檔案」,而文章中提到的「檔案」是普通檔案,磁碟是塊裝置檔案。

在讀寫普通檔案時,會經過檔案系統,由檔案系統負責與磁碟互動;而讀寫磁碟或者分割槽時,就會跳過檔案系統,也就是所謂的「裸i/o「。這兩種讀寫方式所使用的快取是不同的,也是本文提到的 cache 和 buffer 區別。

網路知識什麼是cache? 什麼是buffer? 二者的區別是什麼?

3樓:匿名使用者

通常人們所說的cache就是指快取sram。 sram叫靜態記憶體,「靜態」指的是當我們將一筆資料寫入sram後,除非重新寫入新資料或關閉電源,否則寫入的資料保持不變。

由於cpu的速度比記憶體和硬碟的速度要快得多,所以在存取資料時會使cpu等待,影響計算機的速度。sram的存取速度比其它記憶體和硬碟都要快,所以它被用作電腦的快取記憶體(cache)。

有了快取記憶體,可以先把資料預寫到其中,需要時直接從它讀出,這就縮短了cpu的等待時間。快取記憶體之所以能提高系統的速度是基於一種統計規律,主機板上的控制系統會自動統計記憶體中哪些資料會被頻繁的使用,就把這些資料存在快取記憶體中,cpu要訪問這些資料時,就會先到cache中去找,從而提高整體的執行速度。一般說來,256k的快取記憶體能使整機速度平均提高10%左右。

buffer從英文直譯過來的意思是「緩衝區」,這裡我們將它稱為緩衝,因為它不僅是個名詞,還是個動詞。

緩衝區是儲存一系列的資料的地方,客戶端所獲得的資料可以從程式的執行結果直接輸出,也可以從緩衝區輸出。但是這兩種方式在速度上是有差異的:在web中,當一個asp程式被請求的次數不多時,二者基本上沒有什麼差異,至少我們感覺不出來。

但是當有很多人請求一個asp程式時,速度可就不一樣了。如果沒有緩衝區,那麼每個請求asp程式的人的客戶端所得到的結果都是asp程式執行一次所得到的結果,而如果預先將asp程式緩衝,那麼每個客戶端所得到的結果就是緩衝區的結果,不是執行一次程式的結果。比如有1000個使用者同時訪問一個asp頁面,如果這個asp程式沒有緩衝,那麼程式將被執行一千次,這樣伺服器的負荷就回加大,從而導致客戶端開啟頁面速度變慢;如果這個asp程式被緩衝了,那麼結果就不一樣了,每個客戶端直接從緩衝區獲得資料,伺服器將不會因為訪問增加而增加程式執行次數,因此客戶端開啟頁面的速度也就比上一種情況要快。

這就是buffer的好處。

4樓:匿名使用者

cache和buffer看起來好像是一種東西,cache叫做快取而buffer叫做緩衝。

在硬體概念中,cache的用途是連線兩種速度不同的裝置,比如暫存器和記憶體、cpu和pci-bus、ide匯流排和硬碟。

buffer的原意是類似彈簧的一種緩衝器,用來減輕或吸收衝擊的震動的東西。buffer是一種資料預存取的方式,它用於臨時儲存資料並以與接收速度不同的速度傳輸。buffer的更新方式可以是按時間間隔自動重新整理,而cache則更講究「命中率」,將當前時間段使用頻繁的少量資料放到高速裝置中方便讀寫。在程式開發中,固然沒有什麼高速、低速裝置,不過資料來源是可以有不同讀寫效率的。對於少量資料,文字檔案的讀寫通常就要比資料庫存取效率好,而同樣是文字檔案讀寫,在tmpfs上的效率就要比直接的磁碟io效率好。

oracle buffer和cache的區別

5樓:匿名使用者

1. cache:快取區,是快取記憶體,是位於cpu和主記憶體之間的容量較小但速度很快的儲存器,因為cpu的速度遠遠高於主記憶體的速度,cpu從記憶體中讀取資料需等待很長的時間,而 cache儲存著cpu剛用過的資料或迴圈使用的部分資料,這時從cache中讀取資料會更快,減少了cpu等待的時間,提高了系統的效能。

cache並不是快取檔案的,而是快取塊的(塊是i/o讀寫最小的單元);cache一般會用在i/o請求上,如果多個程序要訪問某個檔案,可以把此檔案讀入cache中,這樣下一個程序獲取cpu控制權並訪問此檔案直接從cache讀取,提高系統效能。

2. buffer:緩衝區,用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料;通過buffer可以減少程序間通訊需要等待的時間,當儲存速度快的裝置與儲存速度慢的裝置進行通訊時,儲存慢的資料先把資料存放到buffer,達到一定程度儲存快的裝置再讀取buffer的資料,在此期間儲存快的裝置cpu可以幹其他的事情。

buffer:一般是用在寫入磁碟的,例如:某個程序要求多個欄位被讀入,當所有要求的欄位被讀入之前已經讀入的欄位會先放到buffer中。

oracle 中的cache和buffer之間有什麼區別和聯絡

6樓:周圍圓

二者都是為了提高i/o效率,但是卻不盡相同。

這裡涉及三個硬體裝置:cpu、記憶體、磁碟。

三者的i/o速度為:cpu>記憶體》磁碟。

cache:快取區。

cpu從記憶體讀取資料的時候,記憶體是無法完全供的上cpu速度的,此時cache快取區的作用就體現出來了。在cpu工作時,記憶體先把資料放入cache,這時從cache中讀取資料會更快,減少了cpu等待的時間,提高了系統的效能。

buffer:緩衝區。

記憶體中的資料寫入磁碟時,磁碟的讀寫速度也無法和記憶體比,造成磁碟i/o頻繁,大大降低了i/o效率,此時buffer快取區的作用就體現出來了,先將資料放入快取區,達到一定數量之後,統一寫入磁碟,減少i/o次數,提高系統效能。

7樓:網友

個人理解:

cache就是一個稱謂吧,對於disk來說memory可以算是cache了,就是速度要比disk快。

oracle的最小單位是block,資料檔案就是一堆block的集合,存在disk上,如果block讀到cache裡,那這個block就可以稱為buffer,如果這個buffer還被修改過了並且還沒有寫回disk,那這個buffer又叫dirty buffer

cpu也有cache的,比如一級cache二級cache,應該沒有一級buffer和二級buffer這種叫法吧。

8樓:兕魂

cache 使用者提交(dml) 但未commit的。

buffer 是使用者讀取後(dql) 準備再次給使用者讀取的。

什麼是cache?什麼是buffer?二者的區別是什麼

9樓:網友

buffer的定義是是 一段儲存臨時資料的空間。

cache是buffer的一種使用形式。

cache 是為了提高資料流通速度而設計的buffer。典型的例子是,從硬碟讀取到記憶體速度極其緩慢,但是有些硬碟內建一些小的cache快閃記憶體,用來臨時儲存最常呼叫的資料。他們的讀取速度非常快,但是儲存空間可能很小,可能只有64mb。

這個64mb的空間是一個buffer,但是他們被用作cache,用來提高記憶體和硬碟之間的資料流通速度。

linux中buffer和cache的區別

10樓:匿名使用者

page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的清晰。如果能夠瞭解到這兩個cache的本質,那麼我們在分析io問題的時候可能會更加得心應手。

page cache實際上是針對檔案系統的,是檔案的快取,在檔案層面上的資料會快取到page cache。檔案的邏輯層需要對映到實際的物理磁碟,這種對映關係由檔案系統來完成。當page cache的資料需要重新整理時,page cache中的資料交給buffer cache,但是這種處理在2.

6版本的核心之後就變的很簡單了,沒有真正意義上的cache操作。

buffer cache是針對磁碟塊的快取,也就是在沒有檔案系統的情況下,直接對磁碟進行操作的資料會快取到buffer cache中,例如,檔案系統的後設資料都會快取到buffer cache中。

簡單說來,page cache用來快取檔案資料,buffer cache用來快取磁碟資料。在有檔案系統的情況下,對檔案操作,那麼資料會快取到page cache,如果直接採用dd等工具對磁碟進行讀寫,那麼資料會快取到buffer cache。

補充一點,在檔案系統層每個裝置都會分配一個def_blk_ops的檔案操作方法,這是裝置的操作方法,在每個裝置的inode下面會存在一個radix tree,這個radix tree下面將會放置快取資料的page頁。這個page的數量將會在top程式的buffer一欄中顯示。如果裝置做了檔案系統,那麼會生成一個inode,這個inode會分配ext3_ops之類的操作方法,這些方法是檔案系統的方法,在這個inode下面同樣存在一個radix tree,這裡會快取檔案的page頁,快取頁的數量在top程式的cache一欄進行統計。

從上面的分析可以看出,核心中的buffer cache和page cache在處理上是保持一致的,但是存在概念上的差別,page cache針對檔案的cache,buffer是針對磁碟塊資料的cache,僅此而已。

cache的作用是什麼,cache作用

我們都知道 mysql 的 table cache 是表定義的快取,江湖上流傳著各種對這個引數的調優方法。table cache 的作用,就是節約讀取表結構檔案的開銷。對於table cache 是否命中,其實table cache 是針對於執行緒的,每個執行緒有自己的快取,只快取本執行緒的表結構定...

在主存和CPU之間增加cache儲存器的目的是

把常用的資料和指令存在這裡,提高系統的速度。因為cpu的速度太快了。硬碟和記憶體的速度無法跟上。就必須弄出幾級cache來暫存資料。否則,cpu把資料處理完畢,但是硬碟上的資料和記憶體中的資料卻還沒有達到cpu,那樣cpu就會空轉,影響整個系統的效率。其實如果硬碟到cpu的速度足夠快,那麼包括記憶體...

Cache是指在CPU和記憶體之間設定一級或兩級高速小容量儲存器 ,對不對

嗯,在計算機裡面有兩個地方有cache,一個就是cpu裡面,有兩級cache,是隨機靜態儲存器做的,速度與cpu相配合。一級cache整合在cpu裡面,二級的cache早期在主機板上,現在基本也整合在cpu上。此外硬碟中也有cache,主要為提高硬碟與記憶體資料交換的。這道題嚴格來說不完成,不過從一...