Buffer

词义: 缓冲区 比如需要对磁盘进行10次写入,前9次写入都暂且被存在内存中,直到第10次写入时。才将这10次写入的数据一次性写入到磁盘,以此来减少IO的操作次数,有消峰的效果

Cache

词义: 缓存区 假设我们需要从一块4K对齐的磁盘中读取9KB的文件数据,最终就会读取到磁盘的3个扇区(因为一个扇区是4K,所以9K数据会有3个扇区)到内存中,存放这3个扇区数据的内存空间,就是buffer,CPU可以直接操作这一组Buffer,操作完成后,Buffer会被释放

如果应用需要重复的读取这个9KB的文件,每次都要从磁盘读取显然很慢,如果第一次读取后,没有直接清空buffer,而是把这段内存保存下来或者复制,以后读取这个文件就可以直接从内存读取,这就是Cache,严谨来说,上述这种属于ReadCache

既然有ReadCache,那就有WriteCache。
假设应用对刚刚读取的4个扇区数据,在内存中修改了第一个扇区的数据,然后又修改了第二个扇区的数据,紧接着又修改了第三个扇区的数据。这3次修改被合并为了一次IO操作并写入磁盘,这就是WriteCache,也是Buffer的一种形式

区别总结

  • Buffer除了作为临时存放IO数据的作用外,还可以消峰,而Cache是为了提高性能而生
  • Buffer中的数据不能被清除,一旦被清除可能意味着IO Error; Cache可以被清除,只是清除后需要重新从磁盘寻找数据
  • 由于CPU不能直接操作内存,所以每次IO一定会产生buffer,而不一定产生Cache,是否产生Cache取决于特定的算法
    Cache又分为ReadCache和WriteCache,比如在WriteCache时,又属于是buffer的一种形式。所以Buffer和Cache常常一起出现。很多时候Write Cache同时也可以作为Read Cache使用,但在分布式系统中,则需要考虑Cache一致性的问题
  • Buffer和Cache非常相似,它们都存储数据。特定场合它们也有区别,Buffer的主要目的是在不同应用、线程、进程之间共享字节数据,例如为了让不同速度的设备能够进行数据同步,就会使用共享 Buffer;
Copyright © 运维知识库 all right reserved,powered by Gitbook文件修订时间: 2023-09-19 10:45:38

results matching ""

    No results matching ""