Cache 和 Buffer 都是缓存,它们的区别

首先,buffer和cache对读和写都会混存,只是对象不同,前者是针对块设备,后者是针对文件。

网上说buffer是用于存放将要输出到disk(块设备)的数据,而cache是存放从disk上读出的数据,这个说法觉得有点太绝对了

比如说出国旅游,一个箱子一个腰包,在机场,腰包里装的是机票,护照,人民币。到了酒店,出去玩,腰包里放的是地图,门票,外币。护照人民币在哪里?在酒店的保险柜里。把当前最常用的东西,放在最容易拿的地方,这就是cache。旅游回来,下了飞机坐火车,下了火车上小巴。交了钱,车却不走,司机打开门,对着外面喊,“再上两个,凑够十个就开车!”这就是buffer。

不过Buffer多用于编程方面,Cache多用于非编程方面的叫法。比如为某程序分配一段Buffer,而一般没有说为某程序分配一段Cache的,但是你可以说这个程序有Cache,或者说Cache是泛指,Buffer是特指。而对于磁盘阵列来讲,Buffer=Cache。对于网页来说,cache就是把网页缓存到本地,方便下次打开速度更快

其次,严格来讲,只有cache叫做“缓存”,而buffer应该叫“缓冲区”。cache的作用是弥补两个设备之间的读写速度差异,基本结构是低速设备-cache-高速设备,其中高速设备主导数据交换(决定读或写什么数据)以典型的内存-cache-CPU场景为例,CPU读写速度远高于内存,就需要在二者之间加入一个cache。CPU从cache中读取(read)数据,未命中时会从内存中加载(load)数据到cache中;写入(write)也是写入cache,然后再把cache中的数据保存(save)到内存。buffer的作用是将两个设备的读写操作解耦,基本结构是设备A-buffer-设备B,两个设备是等地位的,只是在功能上分别担任发送方和接收方以典型的计算机A-buffer-计算机B的通信场景为例,计算机A可以在任意时间将数据写入buffer,计算机B可以在任意时间从buffer读取已写入的数据,反之亦然。二者不需要考虑对方的读写状态,可以按照自己的节奏读写数据,保证自身高效运转。

以你(CPU)在图书馆读书为例,假设有个助手(OS)在帮你取书、还书。Cache,缓存:这几本书我马上就要读,所以给我放到桌子上。桌子=Cache,以提高效率为目的,桌子上的书随看随拿,不用等着助手去书架上拿,效率当然高。Buffer,缓冲:这本书我读好了,要放回到书架上,但如果每次读好一本书就要站起来走到书架那边去太麻烦了,所以我先把书放到手推车上,等攒满一堆书之后助手再一次性还回到书架上。从书架上拿过来的书同理,先放手推车上,攒上几本后再上桌、或是直接开始看。手推车=Buffer,用于I/O(从书架取数、把书换到书架上)的缓冲。

cache 解决时间问题 —— 不够快,用空间换时间。
buffer 解决空间问题 —— 不够大,用时间换空间。

各种理解都是可以的

你可能感兴趣的:(linux,ubuntu,centos)