概念区分:BUFFER缓冲区 和 CACHE缓存区 的区别

时间:2021-07-30 04:00:30

BUFFER和CACHE两者都具有提高系统IO的能力,但是这两个概念是有区别的,原理也不尽相同.

首先是概念介绍:

Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。

Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

Buffer一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。

注意:Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

cache改善系统性能主要的原理是"数据访问的局部性"

即,通常应用程序在一段时间内操作的数据集的某个有限的部分,通常是很小的一部分。硬件实现的cache通常会只使用一小块(与主存相比)访问速度很快,并放置于距离CPU较近的位置。


buffer改善系统性能的主要原因是"减少不必要的状态切换和设备I/O"。

由于制造工艺等个方面的原因,系统中不同部件的速度往往是不一样的,一次进行批量的操作(例如,预先读取,或者将写数据凑成一个整数之后再写),往往要比到需要时等待这些操作完成要节省时间,并且有效地降低状态切换导致的开销。



      

    还有一个比较显著的区别是cache通常是硬件或OS提供,用户程序不需要(多数情况下也没有办法)为其分配存储的机制,通常它在使用者,对用户程序看来是透明的,它属于提供cache的一方而不是其使用者;

而buffer往往是由用户程序知道并且与OS共享(换言之,用户程序需要分配一块内存,并告诉OS这块内存将要用于某种操作),或由OS分配,并在主机和外设之间共享(例如网卡的DMA buffer),在使用者看来它通常不是透明的,这些内存往往属于控制内存的程序,如用户程序,或OS,而不是向其传递数据的OS,或硬件。

不过,这个区别主要是传统意义上的cache。最近几年引入的一些新概念,特别是Internet
cache并不能用这种方法来区分。我认为最关键的区别其实在于,buffer主要作用是在于减少实际的I/O操作次数,即,将多次操作尽量合并成一次的

成批操作,通常其中的数据在操作完成之后,buffer不会被继续使用;而cache的主要作用在于更好地利用局部性原理,减少不必要的I/O,避免代价