Cache 和 Buffer 都是緩存,主要區(qū)別是什么?

轉(zhuǎn)自知乎
原文鏈接
Cache 是把最常用的工具放在手邊,Buffer 是你家的垃圾桶,你平時(shí)的垃圾先扔在垃圾桶里,等垃圾桶滿了再扔垃圾。

Cache 的存在原因是對資源調(diào)用的空間局部性,你現(xiàn)在在看一本數(shù)學(xué)書,那么極有可能你一會(huì)兒還要再去圖書館的數(shù)學(xué)書架上找同類型的書,所以你在圖書館找了一個(gè)離數(shù)學(xué)區(qū)很近的位置坐下,你微信和一些人聊天,聊的最多的那個(gè)往往在微信消息列表靠頂部的位置,因?yàn)榱牡淖疃?,很有可能你一?huì)還要和她聊,你上午訪問知乎,很有可能最近幾天你都要訪問,所以瀏覽器就把知乎網(wǎng)站的靜態(tài)資源先緩存下來,下次訪問無需再次下載,這是 Cache。

Buffer 的存在原因是生產(chǎn)者和消費(fèi)者對資源的生產(chǎn)/效率速率不一致。比如你看視頻,視頻控件會(huì)先預(yù)加載幾秒的視頻資源到緩沖區(qū),看視頻的你是資源消費(fèi)者,你消費(fèi)視頻的速率就是視頻資源按照其時(shí)間速率正常播放,但是你下載視頻的速率可能時(shí)快時(shí)慢。如果剛開始先預(yù)加載幾秒資源緩沖區(qū),就算有一兩秒網(wǎng)絡(luò)擁塞了,視頻還能順暢播放,如果網(wǎng)速給力,則會(huì)有更多的資源被下載進(jìn)來,這時(shí)資源會(huì)越積越多,這時(shí)可能緩沖區(qū)滿了,就暫時(shí)停止加載,等你的資源消費(fèi)的緩沖區(qū)空出一部分了,再繼續(xù)開始加載,這樣雖然視頻的下載速度是波動(dòng)的,但是你看的視頻是穩(wěn)定等速率播放的。當(dāng)你有資源要寫入硬盤時(shí),硬盤的最小寫入大小往往是一個(gè) block,一般是 4KB,但是你準(zhǔn)備寫入數(shù)據(jù)的時(shí)候,有可能是一大堆字符,所以這時(shí),你要把數(shù)據(jù)寫到內(nèi)存里,就要先準(zhǔn)備好 4KB 的數(shù)據(jù),然后寫 4KB,再準(zhǔn)備 4KB 數(shù)據(jù),而不是每次準(zhǔn)備好了一個(gè) byte 的數(shù)據(jù),就要寫到磁盤里,這時(shí),你是生產(chǎn)者,磁盤是消費(fèi)者,磁盤是每次 4KB 的速率消費(fèi)數(shù)據(jù),而你生產(chǎn)數(shù)據(jù)是字節(jié)流方式生產(chǎn),這時(shí)就需要一個(gè)緩沖區(qū),暫時(shí)存放那些還沒攢夠 4KB 的數(shù)據(jù)。網(wǎng)絡(luò)連接過程中,內(nèi)核中保持的 TCP 連接,因?yàn)榫W(wǎng)速和對面生產(chǎn)者的原因,可能會(huì)有大量數(shù)據(jù)寫入 TCP 的緩沖區(qū),一方面因?yàn)閿?shù)據(jù)可能seq對不上,需要等待,另一方面是因?yàn)閷?yīng)該 socket 的應(yīng)用程序并不一定能及時(shí)地把這些數(shù)據(jù)取走(消費(fèi))。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Kafka 整體架構(gòu) Kafka是大數(shù)據(jù)領(lǐng)域無處不在的消息中間件,目前廣泛使用在企業(yè)內(nèi)部的實(shí)時(shí)數(shù)據(jù)管道,并幫助企業(yè)...
    光劍書架上的書閱讀 413評論 0 1
  • 一、概述 (一)、kafka的定義 1、定義 1)kafka傳統(tǒng)的定義:kafka是一個(gè)分布式的基于發(fā)布/訂閱模式...
    rainple閱讀 898評論 0 0
  • 姓名: 李小娜 [嵌牛導(dǎo)讀] :當(dāng)你在linux下頻繁存取文件后,物理內(nèi)存會(huì)很快被用光,當(dāng)程序結(jié)束后,內(nèi)存不會(huì)被正...
    n184閱讀 4,000評論 0 1
  • 上一節(jié),我們梳理了 Linux 內(nèi)存管理的基本原理,并學(xué)會(huì)了用 free 和 top 等工具,來查看系統(tǒng)和進(jìn)程的內(nèi)...
    tracy_668閱讀 1,299評論 0 4
  • 大學(xué)的時(shí)候,幫朋友寫的操作系統(tǒng)調(diào)研的作業(yè),最近整理過去的文檔時(shí)候偶然發(fā)現(xiàn),遂作為博客發(fā)出來。 從串口驅(qū)動(dòng)到Linu...
    free_will閱讀 7,692評論 7 59

友情鏈接更多精彩內(nèi)容