安全氣囊給我來(lái)了個(gè)緩存
見字如面,小伙伴們大家好呀,我是小牛肉~ 寫這篇文章的起因主要是最近復(fù)習(xí)計(jì)網(wǎng)滑動(dòng)窗口中看到的一句話 “窗口的本質(zhì)是內(nèi)核緩沖區(qū)”,之前一直沒有仔細(xì)去理解,以為就是緩存,很多博客寫得也是緩存......,But 緩沖和緩存在概念上其實(shí)是有區(qū)別的。本篇文章就先來(lái)解釋下這倆概念上的區(qū)別,為后續(xù)內(nèi)核緩沖區(qū)鋪下墊
緩沖和緩存英文單詞完全不一樣,因?yàn)榉g問題,很容易被混淆。。。。。
可以說(shuō)安全氣囊給你來(lái)了個(gè)緩沖,能說(shuō)安全氣囊給你來(lái)了個(gè)緩存嗎?
滑稽
緩存(cache):是為了彌補(bǔ)高速設(shè)備和低速設(shè)備的鴻溝而引入的中間層,主要目的就是基于時(shí)間局部性原理,將常用的數(shù)據(jù)放到訪問速度更快的緩存中,從而最終起到加快訪問/讀取速度的作用。
緩沖(buffer):主要目的進(jìn)行流量規(guī)整,把很多個(gè)規(guī)模較小的 IO 整理成少數(shù)個(gè)較大規(guī)模的 IO,以減少響應(yīng)次數(shù)(比如從網(wǎng)上下電影,不是下一點(diǎn)數(shù)據(jù)就寫一下磁盤,而是積攢一定量的數(shù)據(jù)以后一整塊一起寫)。
具體來(lái)說(shuō),緩沖是為了解決生產(chǎn)者和消費(fèi)者速度不均勻的問題,而在生產(chǎn)和消費(fèi)者之間設(shè)立的一個(gè)緩和區(qū)、平衡區(qū)。
比如你網(wǎng)上沖浪在線看視頻,一開始我們往往能看到下面這個(gè)界面:

其實(shí)就是視頻控件先預(yù)加載幾秒的視頻資源到緩沖區(qū)中,看視頻的你是資源消費(fèi)者,你消費(fèi)視頻的速率肯定是穩(wěn)定的,但是視頻加載的速率由于網(wǎng)絡(luò)(生產(chǎn)者)的波動(dòng)可能時(shí)快時(shí)慢。
如果剛開始先預(yù)加載幾秒資源緩沖區(qū),就算有一兩秒網(wǎng)絡(luò)擁塞了,視頻可以從緩沖區(qū)中取資源,還能順暢播放一會(huì),如果網(wǎng)速給力,等不到緩沖區(qū)中的資源被消費(fèi)完,就會(huì)有更多的資源被下載進(jìn)緩沖區(qū)中,資源在緩沖區(qū)中就會(huì)越積越多。
當(dāng)然,如果緩沖區(qū)滿了,就會(huì)暫時(shí)停止加載,等你消費(fèi)的緩沖區(qū)空出一部分了,再繼續(xù)開始加載。
這樣雖然視頻的下載速度是波動(dòng)的,但對(duì)你是透明的,你看到的視頻是從緩沖區(qū)中穩(wěn)定地等速率拿的。
再舉個(gè)例子,從網(wǎng)上下載大文件到磁盤上的的時(shí)候,block(塊)是操作系統(tǒng)中最小的邏輯存儲(chǔ)單位,操作系統(tǒng)與磁盤打交道的最小單位就是磁盤塊,就比如一個(gè) block 是 4KB 吧
下載文件的時(shí)候肯定是一連串的字符,所以這時(shí),你要把數(shù)據(jù)寫到磁盤上,就要先準(zhǔn)備好足夠填充一個(gè) block 的數(shù)據(jù)(4KB),然后寫入一個(gè) block,再準(zhǔn)備 4KB 的數(shù)據(jù).....,而不是每次準(zhǔn)備好了一個(gè)字節(jié)的數(shù)據(jù),就馬上寫到磁盤里,這樣對(duì)于磁盤的寫操作實(shí)在是太頻繁了。
這時(shí)候,下載文件的你是生產(chǎn)者,磁盤是消費(fèi)者,磁盤以每次?4KB?的穩(wěn)定速率進(jìn)行消費(fèi)數(shù)據(jù),而你生產(chǎn)數(shù)據(jù)是一個(gè)字節(jié)一個(gè)字節(jié)地生產(chǎn),這時(shí)就需要一個(gè)緩沖區(qū),暫時(shí)存放那些還沒攢夠?4KB?的數(shù)據(jù)。
所以說(shuō),當(dāng)斷網(wǎng)或者斷電的時(shí)候,緩沖區(qū)中的數(shù)據(jù)是會(huì)丟失的
上張圖看下有無(wú) buffer 的對(duì)比圖:

簡(jiǎn)單來(lái)說(shuō),Cache 是把最常用的東西放在最容易拿到的地方,這樣你可以少走一點(diǎn)路;而 Buffer 就跟個(gè)垃圾桶一樣(有點(diǎn)不恰當(dāng)了哈),你平時(shí)的垃圾先扔在垃圾桶里,等垃圾桶滿了再扔垃圾,這樣減少你扔垃圾的次數(shù)。
Tip:學(xué)虛擬地址到物理地址轉(zhuǎn)換的時(shí)候,我們一定知道 TLB(轉(zhuǎn)換檢測(cè)緩沖區(qū),Translation Lookaside Buffer),TLB 中存放的就是那些會(huì)被反復(fù)讀取的頁(yè)表項(xiàng)。所以,這里名字起得有些偏頗,TLB 起到的其實(shí)是 Cache 的作用。
心之所向,素履以往,我是小牛肉,小伙伴們下篇文章再見 ??
