tft每日頭條

 > 生活

 > cache的數據區一般包含什麼

cache的數據區一般包含什麼

生活 更新时间:2024-07-27 18:01:50

cache的數據區一般包含什麼(Cache和Buffer)1

提到這個問題,可能意味着題主意識到了兩者的相關性。的确,他們确實有那麼一些聯系。

首先cache是緩存,Buffer是緩沖,雖然翻譯有那麼一個字的不同,但這不是重點。

個人認為他們最直觀的區别在于cache是随機訪問,buffer往往是順序訪問。雖然這樣說并沒有直擊本質,不過我們可以待分析完畢之後再來讨論真正的本質。

為了說明這個問題,讓我将他們分開來說:read cache(讀緩存),read buffer(讀緩沖),write cache(寫緩存),write buffer(寫緩沖)。

無論緩存還是緩沖,其實本質上解決的都是讀寫速度不匹配的問題,從這個角度,他們非常相似。

首先讨論讀緩存跟讀緩沖。

讀緩存跟讀緩沖的最大區别在于,讀緩存的目标數據是始終有效的,如果不從緩存中讀取,也可以直接讀取實際數據,隻不過實際數據讀取會慢一些,當這個數據在緩存中,讀取速度将會變快。

當一個緩存中的數據被多次讀取,實際上就減少了該數據從慢速設備中讀取的量,這就存在某種算法去選擇「什麼數據需要保存在cache中」,因為盡可能多的讓cache命中能提高性能。

先進入cache的數據不一定先被讀取,甚至說進入cache的數據有可能永遠不被讀取就被清除了,因此read cache呈現出非常明顯的随機訪問特性。

而讀緩沖buffer的數據則不是始終有效,而是實時生成的數據流,每當buffer滿或者主動flush buffer的時候觸發一次讀取,對于小數據,這樣可以減少讀取次數,對于大數據,這可以控制單次讀取的數據量。

換句話說,無論數據量大還是小,單次讀取數據量都按照buffer尺寸進行歸一化了。通常來說,先喂給buffer的數據一定會先被讀取,所有buffer的數據幾乎一定會被讀取,這是很明顯的順序訪問特性。

從上面的情況看到,讀緩存以及讀緩沖很明确的反應出了我所說的表面特性。而其本質特性在于cache的目标是減少讀取總量每次cache命中都減小了讀取總量。

而buffer并不能減少讀取總量,隻能規整化每次讀取數據的尺寸大小。

要說到write cache跟write buffer?

我們先說write buffer,write buffer是read buffer的對應,對于小數據的寫入,它需要填滿write buffer再進行一次寫入,對于大數據,大數據會被分割到buffer尺寸的大小分批寫入。

因此,write buffer 的用處在于使得每次寫入的數據量相對固定。如果一次寫入4k對某個設備來說效率最高,那麼把buffer定為4k,小數據積攢到4k寫一次,大數據分割到每個碎片4k多次寫入,這樣就是write buffer的用處。

最後我們來說write cache。所謂write cache,就是要設法減少寫入次數。也就是說,如果某些數據需要産生多次寫入,那麼使用cache就可以隻将最終數據寫入,導緻最終寫入數據減少。

在實際應用中,我們有時會使用到write buffer跟write cache的合體形态。buffer本身需要規整尺寸,與此同時,buffer還允許多次随機寫入,使得多次寫入的數據隻用寫入最後一次,這屬于cache的特性。

BT軟件使用的寫緩存往往具有類似特性,因而這種形态它同時既是buffer又是cache。

正因為在寫入場合buffer跟cache沒有那麼明顯的分界,所以才會有産生buffer跟cache究竟有啥區别的疑問。

結論

在read(讀取)的場合,cache通常被用于減少重複讀取數據時的開銷,而buffer則用于規整化每次讀取數據的尺寸,在讀取場合兩者用途差别很大。

在write(寫入)的場合,兩者功能依然沒變,但由于cache跟buffer的功能在寫入場合可以融合使用,所以兩者可以被混淆,寫入緩沖跟寫入緩存往往會同時擔當規整化寫入尺寸以及減少寫入次數的功能,所以兩者有時會被混淆,但這隻是個名稱問題,沒有原則性關系。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved