缓冲(buffer)和缓存(cache)

buffer 和 cache 是内存的不同的体现,接下来简单分析对buffer和cache的理解。

  1. buffer:A buffer is something that has yet to be “written” to disk.

    • 翻译过来就是:buffer 就是写入到磁盘。
    • buffer 是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。
    • buffer 是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入。把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
    • 例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。
  2. cache:A cache is something that has been “read” from the disk and stored for later use.

    • 翻译过来就是:cache 是从磁盘读取数据然后存起来方便以后使用。
    • cache 是为了提高CPU和内存之间的数据交换速度而设计的。
    • cache 实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。
    • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
    • 例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。

buffer 和 cache 对比

共性:

  • 都属于内存,数据都是临时的,一旦关机数据都会丢失。

差异:(先理解前两点,后两点有兴趣可以了解)

  • 缓存(cache)是用来加速数据从硬盘中”读取”的,而缓冲(buffer)是用来加速数据”写入”硬盘的。
  • buffer 数据丢失会影响数据完整性,源数据不受影响;cache 数据丢失不会影响数据完整性,但会影响性能。
  • 一般来说 cache 越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低。buffer 来说,空间越大性能影响不大,够用就行。cache 过小,或者没有 cache,不影响程序逻辑(高并发 cache 过小或者丢失导致系统忙死除外)。buffer 过小有时候会影响程序逻辑,如导致网络丢包。
  • cache 可以做到应用透明,编写应用的可以不用管是否有 cache,可以在应用做好之后再上 cache。当然开发者显式使用 cache 也行。buffer 需要编写应用的人设计,是程序的一部分。

缓冲(buffer)和缓存(cache)
https://flepeng.github.io/002-Linux-缓冲(buffer)和缓存(cache)/
作者
Lepeng
发布于
2021年7月5日
许可协议