Buffer和Cache的區別

緩存(cache)實際並不是緩衝文件的,而是緩衝塊的,塊是磁盤I/O操作的最小單元(在Linux中,它們通常是1KB)。這樣,目錄、超級塊、其它文件系統的薄記數據以及非文件系統的磁盤數據都可以被緩衝了。

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

兩者都是RAM中的數據。簡單來說,buffer是即將要被寫入磁盤的,而cache是被從磁盤中讀出來的。

buffer是由各種進程分配的,由進程和系統一起管理.被用在如輸入隊列等方面,一個簡單的例子如某個進程要求有多個字段讀入,在所有字段被讀入完整之前,進程把先前讀入的字段放在buffer中保存。

cache經常被用在磁盤的I/O請求上,如果有多個進程都要訪問某個文件,於是該文件便被做成cache以方便下次被訪問,這樣可提供系統性能。

一.Buffer含義

下圖是對buffer的一個理解。

wps_clip_image-18480

其中模塊A代表一定代碼行的邏輯模塊, 模塊B代表另外一段代碼行的邏輯模塊。

模塊A通過buffer同模塊B進行了間接連接。間接鏈接好處是兩個模塊的耦合關係降低了。

圖中,Buffer的作用就是 將輸入前 雜亂無規則的數據,經過整理後 變成規則有序的數據。真實的buffer的作用其實就是數據的加工與處理,這樣便於後一個環節進行處理利用等。具體情況視不同的buffer而不同。

以上僅僅是我個人的理解,那麼是否正確?

二.Buffer的英文原義

下面是Buffer的專業的定義,如下:

wps_clip_image-26926

網絡定義如下:

wps_clip_image-26353

三.Buffer小結

從上面兩個定義可以知道buffer含義是緩衝的意思,在機械學上通過緩衝墊把兩個系統鏈接到一起。其他定義都是有緩衝相關的意思。

因此我們可以這麼理解

1. Buffer中一定至少存在兩個物體或者事務。

2. 這個兩個事務通過buffer進行連接

3. Buffer起到一定減緩或者協調的作用。

4. 兩個物體或者事務一定是相互知道或者瞭解,只是進行了間接的連接。

四.Cache的理解

下圖是cache的一種處理情況

wps_clip_image-21222

如圖,cache系統中存在模塊A, 模塊B,模塊B包括若干實例, 模塊A也可以包括若干實例。 模塊A存數據到cache中。 模塊B獲取數據從cache中。

因此cache是個數據的臨時存儲場所,有的模塊寫入,有的模塊獲取。 寫入模塊未必瞭解讀取模塊的存在,更準確的是讀取模塊實例的存在,同時寫入模塊也不關心這些事情,他只管寫入。讀取模塊同樣只關心數據的讀取,沒必要瞭解到寫入的存在。

五.Cache的英文含義

下面是cache的英文原義

wps_clip_image-2298

wps_clip_image-15316

從英文含義中我們可以獲取到cache應該個存儲東西的場所,他的核心功能是存儲。

六.Cache小結

從上面兩個定義可以知道cache含義是臨時儲存的一個場所。因此我們可以這麼理解

1. Cache是存儲場所,一個臨時的儲存場所

2. Cache系統中存在寫入模塊A,可以包括多個實例,讀取模塊B可以包括多個實例。

3. Cache是兩類模塊的數據中轉的地方

4. 模塊A僅僅需要知道cache, 模塊B也僅僅需要知道cache的存在,他們相互間不需要相互瞭解。

七. Cache及buffer相同點

1. Cache及buffer都可以存儲一定的數據

2. Cache及buffer存儲的數據一般都是臨時性的,不是永久性的

3. Cache及buffer系統中都存在若干模塊的實例,一般至少需要兩類模塊的存在,模塊A寫入數據(生產數據),模塊B讀取數據(消費數據)

八.Cache及buffer的區別

1. Buffer中,寫入模塊及讀取模塊之間是通過buffer做的間接連接,兩個模塊的特定實例之間是存在耦合關係的。

2. Buffer一般是特定實例對之間專有的,其他實例不應該訪問否則有可能造成問題,除非邏輯上做了處理。

3. Buffer中數據一般是有順序的,寫入順序及讀取順序之間需要一定的對應關係。雙方必須按照約定進行相應的讀取操作。

4. Cache是個共享的方式, 寫入模塊實例不需要了解讀取模塊的任何實例

5. Cache系統中各個實例之間只有同cache本身的耦合關係

6. Cache數據的寫入及讀取都是沒有順序的

7. Cache一般存在有效期,buffer沒有,一般buffer都是專用的,buffer中數據有效期由專有實例管理就好了。Cache中數據過期後將由cache進行淘汰出去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章