Buffer緩衝和Cache快取的區別

2021-08-08 17:38:32 字數 1490 閱讀 6358

buffer與cache操作的物件不一樣。

buffer(緩衝)是為了提高記憶體和硬碟(或其他i/0裝置)之間的資料交換的速度而設計的。

cache(快取)是為了提高cpu和記憶體之間的資料交換速度而設計,也就是平常見到的一級快取、二級快取、**快取(也叫記憶體快取)。

cpu在執行程式所用的指令和讀資料都是針對記憶體的,也就是從記憶體中取得的。由於記憶體讀寫速度慢,為了提高cpu和記憶體之間資料交換的速度,在cpu和記憶體之間增加了cache,它的速度比記憶體快,但是造價高,又由於在cpu內不能整合太多積體電路,所以一般cache比較小,以後intel等公司為了進一步提高速度,又增加了二級cache,甚至**cache,【一級快取 採用的是靜態快取(sram),速度比 採用動態快取(dram)的二級快取 更快,可以把二級快取看成為 一級快取的緩衝器】,它是根據程式的區域性性原理而設計的,就是cpu執行的指令和訪問的資料往往在集中的某一塊,所以把這塊內容放入cache後,cpu就不用在訪問記憶體了,這就提高了訪問速度。

通常cpu找資料或指令的順序是:先到一級快取中找,找不到再到二級快取中找,如果還找不到就只有到記憶體中找了

(補充還有乙個叫磁碟快取:當把磁碟當作快取時,這是磁碟快取。有點類似於 電腦中 虛擬記憶體的 乙個東西,至於磁碟快取和記憶體快取可以看這個部落格

緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。linux有乙個守護程序定期清空緩衝內容(即寫入磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:我這裡有乙個ext2的u盤,我往裡面cp乙個3m的***,但u盤的燈沒有跳動,過了一會兒(或者手動輸入sync)u盤的燈就跳動起來了。解除安裝裝置時會清空緩衝,所以有些時候解除安裝乙個裝置時要等上幾秒鐘。

簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。

buffer是由各種程序分配的,被用在如輸入佇列等方面。乙個簡單的例子如某個程序要求有多個字段讀入,在所有欄位被讀入完整之前,程序把先前讀入的字段放在buffer中儲存。

cache經常被用在磁碟的i/o請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提高系統效能。

一般來說,相同**的儲存器,容量與速度成反比的。即裝的越多速度相對越慢。

快取是指在低速裝置和高速裝置之間的中介。

比如與cpu 速度相比,記憶體速度很慢,就增加乙個速度比較快的l1 cache、l2 cache快取,查詢的時候先在快取查,查不到再去慢的記憶體查,把查到結果放到快取,下次在用的時候就快了。

與記憶體相比,硬碟或者網路傳輸相比慢很多,所以為了速度可以把一部分資料放在記憶體中,查詢的時候先在記憶體查,記憶體查不到在去硬碟或網路,把查到結果放到記憶體中,這就是快取。

所以程式都是執行在記憶體中的,至於快取只是乙個中介作用,可能是記憶體做快取,也可能是別的裝置。

Cache(快取)和Buffer(緩衝)

什麼是快取 快取區?cache 快取 是 讀 資料時在記憶體的一種優化技術。快取區就是占用記憶體中的一塊區域來做程序的資料快取,比如web服務,當使用者第一次請求時,程序會從磁碟 硬碟 中拿資料 結果 將結果儲存到快取區,當第二次該使用者發起同樣的請求時,則程序會在快取區中匹配已經快取的結果,直接返...

雙緩衝和後備緩衝

前面的例子都是,直接在主表面上繪東西。對於動畫,直接在主表面上繪,會產生很嚴重的閃爍。解決的辦法是採用雙緩衝或後備緩衝。雙緩衝 在離屏緩衝中繪製影象,然後將其拷貝到顯示表面。見下面 先把資料放到double buffer,最後再拷貝到主表面上。下面sleep 300 睡眠了0.3秒這麼長的時間是為了...

python全緩衝 行緩衝和無緩衝

這裡的緩衝是指的是使用者空間的i o緩衝區,不是核心緩衝。上述都是i o緩衝區,其作用是減少read和write的次數,即減少了系統呼叫,從而減少了系統開銷,提高了i o速度。核心緩衝區。從理論上講,核心可以在任何時候寫磁碟,但並不是所有的write操作都會導致核心的寫動作。核心會把要寫的資料暫時存...