要问Cache和Buffer的区别,首先要问另一个问题:为何会存在Cache和Buffer?

无论缓存还是缓冲,其实本质上解决的都是读写速度不匹配的问题,从这个角度,他们非常相似。

知乎上关于Cache 和 Buffer 都是缓存,主要区别是什么? - 知乎 (zhihu.com)的回答有上百个,把一个问题拨开了凿穿了分析,看过了许多资料之后,发现博主们从多方面进行了回答,认为有必要对其中比较精辟的回答进行一次整理和汇总,希望对大家也有用

cache 缓存

cache是为解决重复多次读取硬盘数据提供解决方案

cache字面意思理解缓存,在台湾翻译为快取,快取更加形象的表明了cache的作用,快速读取。我们通常把经常访问的数据保存cache中,读取时则不需要再次从硬盘读取,从硬盘上读取数据比较慢,按照原文的意思是从内存读数据和从硬盘读取数据的速度就好比火箭之于蒸汽机的差别。cache可以设置超时时间,超时后内存空间被回收,否则可以一直访问,被清理后的cache数据可以从源数据(硬盘)重新读取,实际数据不丢失。

Buffer 缓冲

背景知识一:我们现在的计算机、手机都是冯诺依曼架构,CPU只能操作内存中的数据,无法直接操作硬盘上的数据。

背景知识二:硬盘上的数据,最小读写单位是扇区(Sector)。老式硬盘上一个扇区是512字节,现代硬盘上一个扇区是4K字节。计算机不能以单个字节为单位访问硬盘上的数据。现在很常见的固态硬盘,物理上最小读写单位是页(Page),但大部分固态硬盘通过主控芯片模拟传统硬盘的扇区来进行读写。现代硬盘常用的LBA(Logical Block Addressing,逻辑块寻址)寻址方式,是把硬盘上的扇区分配从0~N-1的编号(N为硬盘上所有可用扇区数量)。

介绍完背景,假设某个应用现在需要读取一个大小为15K字节的文件A。操作系统和文件系统会把文件路径转换为具体的LBA地址,可能最终转换为读取硬盘上从B扇区开始的4个扇区(按照每个扇区4KB计算)。然而,前面我们说了,CPU并不能直接访问硬盘,因此需要先把这四个扇区的数据,传输到内存中。存放这四个扇区数据的内存,就是Buffer。忽略CPU内部的Cache机制,CPU现在可以对这一段内存以字节为单位进行操作,在所有操作完成后,Buffer所占用的内存会被回收。

buffer的其他应用场景:在写入文档的时候,我们以字符为单位输入,数据并没有保存至硬盘设备,而是暂存至buffer缓冲区,等到缓冲区满或者flush,使用保存按钮的时候,缓冲区的数据才会被写入硬盘,buffer的存在也为了减少硬盘的IO 读写次数,因为每次从内存写入硬盘设备速度也很慢,进而同时也提高了速度。

cache和buffer的联系:从以上介绍读取文件的过程中发现,把数据从硬盘上的扇区传输到内存的过程中,需要把扇区的数据暂存到buffer,将buffer flush写入cache 缓存之后,我们 就可以快取这些数据了。

总结:

涉及到IO设备读写的场景中,Cache的一部分本身就是Buffer的一种。如果说某些场合Buffer可以提升IO设备的读写性能,只不过是因为Buffer本身是Cache系统的一部分,性能提升来自于Cache机制。Buffer不是缓存,国内常用的翻译是缓冲区

其次,大部分场景中,Buffer是特指内存中临时存放的IO设备数据——包括读取和写入;而Cache的用处很多——很多IO设备(例如硬盘、RAID卡)上都有Cache,CPU内部也有Cache,浏览器也有Cache。

Buffer 和 cache的更多相关文章

  1. buffer和cache有什么本质区别

    在free命令展示机器的内存消耗情况,会像这样展示

  2. Buffer和Cache的区别

  3. Linux Free命令各数字含义及Buffer和Cache的区别

    Linux Free命令各数字含义及Buffer和Cache的区别 Free 命令的各数字含义 命令演示 [root@vm1 ~]# free total used free shared buffe ...

  4. linux free命令中buffer与cache的区别

    linux free命令中buffer与cache的区别 2012-05-15      个评论       收藏    我要投稿 linux free命令中buffer与cache的区别   ~$ ...

  5. free命令、buffer与cache的区别

    freefree 命令相对于top 提供了更简洁的查看系统内存使用情况: # free total used free shared buffers cached Mem: 255988 231704 ...

  6. 【Linux】基于Linux的buffer和cache学习

    缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘.其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读 ...

  7. 2015-01-27-从实验出发理解buffer与cache区别-吴伟顺

        通过du(find) 与 cat 体现buffer与cache差异实验: 实验表明: 1 通常 buffer << cache 2 "文件系统"相关内容(ino ...

  8. Linux-手动释放缓存(Buffer、Cache)

    /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对 当前kernel的行为做出调整.那么我们可以通过调整/ ...

  9. Linux中Buffer和Cache的区别

    1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚 ...

  10. [转帖]buffer与cache的区别

    作者:沈万马链接:https://www.zhihu.com/question/26190832/answer/146259979来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

随机推荐

  1. DHCP原理与LINUX下的配置

    DHCP原理与LINUX下的配置 目录 DHCP原理与LINUX下的配置 一.DHCP工作原理 1.DHCP概述 2.DHCP的优势 3.DHCP的分配方式 (1)自动分配 (2)手动分配 (3)动态 ...

  2. MLlib学习——降维

    降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中,用于消除噪声.对 ...

  3. Selenium对应版本

    下面是谷歌浏览器与chromedriver的版本对应关系,供参考: ChromeDriver v2.45 (2018-12-10)----------Supports Chrome v70-72Chr ...

  4. Solution -「LOCAL」割海成路之日

    \(\mathcal{Description}\)   OurOJ.   给定 \(n\) 个点的一棵树,有 \(1,2,3\) 三种边权.一条简单有向路径 \((s,t)\) 合法,当且仅当走过一条 ...

  5. leetcode算法1.两数之和

    哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...

  6. MySQL架构原理之运行机制

    所谓运行机制即MySQL内部就如生产车间如何进行生产的.如下图: 1.建立连接,通过客户端/服务器通信协议与MySQL建立连接.MySQL客户端与服务端的通信方式是"半双工".对于 ...

  7. vue methods中的函数调用时带括号与不带括号的区别

    @click='getList(id)',但是为什么有时候明明没有传参的需要,却要加上()呢? 百思不得其解,于是去查阅了相关的资料,意思就是,当不加括号直接调用这个函数是可以直接获取到这个事件对象的 ...

  8. AngularJS 打算开始学习

    作为朋友推荐给我的一款框架 个人感觉还不错  打算开始学习

  9. maven项目 mvn clean install 或 build,报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

    解决办法 在pom文件中添加

  10. 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)

    1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ...