Linux下 buffer和cache的区别

从字面意思来看,buffer名为缓冲,cache名为缓存。我们知道各种硬件在制作工艺上得差别,所以当这两种硬件需要交互的时候,肯定会存在速度上的差异,而且只有交互双方都完成才可以各自处理其他的事物。假如现在有两个需要交互得设备 A 和 B,A设备用来交互得接口速率为 1000M/s,B设备用来交互得接口速率为 500M/s,那他们彼此访问的时候都会出现以下两种情况:(以A来说)
1. A 从 B 取一个 1000M 的文件结果需要 2s,本来 1s就可以完成的工作,却还需要额外等待 1s,B设备把剩余的 500M找出来,还需要等待 B 取出来剩下的 500M 的空闲时间内(1s)其他的事务还干不了。
2. A 给 B 一个 1000M 的文件结果也需要 2s,本来需要也就 1s 就可以完成的工作,却由于 B,1s 内只能拿 500M,剩下的 500M 还得等下一个 1s 由 B 来取,这等待下一个 1s 的时间还做不了其他事务。
 
那有什么办法既可以让 A 在'取'或'给' B 的时候既能完成目标任务又不浪费那 1s 空闲等待时间取处理其他事物呢?我们知道产生这种结果主要是因为 B 没有跟上 A 的节奏,但即使这样 A 也得必须等待 B 处理完本次事务才能干其他活(单核cpu来说),除非你有三头六臂。那么有小伙伴可能会问了,能不能在 A 和 B 之间加一层区域比如说 ab,让 ab 既能跟上 A 的频率也会照顾 B 的感受,没错我们确实可以这样设计来磨合接口速率上的差异,你可以这样想象,在区域 ab 提供了两个交互接口一个是 a 接口另一个是 b 接口,a接口的速率接近 A,b接口的速率最少等于 B,然后我们把 ab 的 a和 A相连,ab的 b 和 B 相连,ab 就像一座大桥把 A 和 B 连接起来,并告知 A 和 B 通过他都能转发给对方,文件可以暂时存储,最终拓补如下

 

示例
现在我们再来看上述的两种情况:
对于第一种情况 A 要 B:当 A 从 B 取一个 1000M 的文件,他把需求告诉了 ab,接下来 ab通过 b 和 B 进行文件传送,由于 B 本身的速率,传递第一次 ab并没有什么用,对于 A 来说不仅浪费了时间还浪费了感情,ab 这家伙很快感受到了 A 的不满,所以在第二次传送的时候,ab 背着 B 偷偷缓存了一个一摸一样的文件,而且只要从 B 取东西,ab都会缓存一个拷贝下来放在自己的大本营,如果下次 A 或者其他 C 来 B 取东西,ab 直接给 A 或 C 一个货真价实的赝品,然后把它通过 a 接口传递给 A 或 C,所以 A 觉着不错问他省了时间,最终和 ab 成为了好基友,说白了此时的 ab 提供的就是一种缓存能力,即 cache,绝对的走私!因为 C 取得是 A 执行的结果。所以在这种工作模式下,怎么取得东西是最新的也是我们要考虑的,一般就是清 cache。例如 cpu 读取内存数据,硬盘一般都是提供一个内存作为缓存来增加系统的读取性能。
对于第二种情况 A 给 B:当 A 发给 B 一个 1000M的文件,因为 A 知道通过 ab 的 a接口就可以转交给 B,而且通过 a 接口要比通过 B 接口传送文件需要等待的时间更短,所以 1000M 通过 a 给了 ab,站在 A 视图上他已经把 1000M 的文件给了 B,但对于 ab 并不立即交给 B,而是先缓存下来,除非 B执行 sync 命令,即使 B 马上要,但由于 b 的接口速率要大于 B接口速率,所以也不会存在漏洞时间,但最终的结果是 A 节约了时间就可以干其他的事务,说白了就是推卸责任,而 ab 此时提供的就是一种缓冲能力,即 buffer,它存在的目的适用于当速度快的往速度慢的输出东西。例如内存的数据要写磁盘,cpu 寄存器里的数据写到内从。
 
看一下现在计算机领域,在处理磁盘 IO 读写的时候,cpu、memory、disk 基于这种模型给出的一个实例。

 

示例
Page Cache:文件系统层级的缓存,从磁盘里读取的内容是存储到这里,这样读取程序读取磁盘内容就会非常快,比如使用 grep 和 find 等命令查找内容和文件时,第一次回慢很多,再次执行几乎是瞬间。但如上所说,如果对文件的更新并不关心,就没必要清除 cache,否则如果要实时同步,必须要把内存空间中的 cache clean 下。
Buffer Cache:磁盘等设备的缓冲,内存的这一部分是要写入磁盘里的。这种情况需要注意,位于内存 buffer 中的数据不是即时写入磁盘,而是系统空闲或者 buffer 达到一定大小写到磁盘中,所以断电易失,为了防止数据丢失所以我们最好正常关机或者多执行几次 sync 命令,让位于 buffer上的数据立刻写道磁盘里。
 
 
 
 
 
posted @ 2022-11-02 15:36  茄子777  阅读(273)  评论(0编辑  收藏  举报