缓冲区和缓存有什么区别?

缓冲区和缓存有什么区别?

我知道缓存是用来提高从硬盘读取数据的速度的,因为从硬盘读取数据的速度和从RAM读取数据的速度有很大不同。所以cache miss的索引非常重要。

另外,我知道我们在读取和写入硬盘或其他设备(例如键盘)时有缓冲区(例如,Java 中有BufferedWriter和)。BufferedReader但我不知道为什么我们需要一个缓冲区。如果我们没有缓冲区怎么办?缓冲区也是为了提高读取速度吗?如果是的话,缓冲区和缓存有什么区别?

另外,我知道缓存是为了提高读取速度,但是缓存可以提高从RAM向硬盘写入数据的速度吗?

答案1

据我了解,当生产者和消费者最佳地生产或消费数据的速率不同时,缓冲区是最有用的。

例如,程序可以一次向文件写入 8 个字节的数据。对于正在写入的磁盘,一次实际写入 4 KiB 数据可能是最佳的。对于明显较小的块,写入磁盘所涉及的开销可能会大于磁盘实际写入数据所花费的时间(因此 512*T_8b >> T_4KiB)。因此,在收集 4 KiB 数据块并一次性写入它们之间设置一个缓冲区将大大提高性能。例如,参见:为什么 dd 需要太长时间?,其中最简单的解决方案是使用更大的缓冲区大小。 (当然,我这里的数字纯粹是为了举例。适合现代磁盘的实际数字可能有很大不同。)

高速缓存与缓冲正交。缓存和缓冲都是为了防止对慢速源(磁盘、网络等)进行不必要的额外访问。但是,缓存的工作原理是通过保存结果以供重用来消除重复的读取和写入,而缓冲区的工作原理是通过将结果集中在一起来消除重复的顺序读取和写入。一个简单的观点:

  • 当您读取同一位置n次时,只有第一次真正到达磁盘,其余的来自缓存
  • 当您向同一位置写入 n 次时,实际上只写入最后一次

相关内容