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

俩英文单词,不先看看本义吗?虽然都是抽象单词,但在各个地方都有具象的应用。

Buffer常见的是这个:

(来源:train stop buffer bumper)
对,就是铁道端头那个巨大的弹簧一类的东西。作用是万一车没停住(是没停住啊,刹车了但是差一点没刹住那种,不是不拉刹直接撞上来),撞弹簧上减速慢,危险小一些。叫缓冲

Cache常见的是这个:

(来源:https://upload.wikimedia.org/wikipedia/commons/6/68/Bear_caches.jpg)
没错,就是一种保管箱。看到右边那个被锈掉的Food Cache没?这是部署在森林里的存应急物资的保管箱。功能是把你需要用的东西放在更容易拿到的地方。虽然常用准确翻译叫缓存,但个人以为意思表达的不对,丢了一半的功能。台湾的翻译更好,叫快取

相信看完这些应该不用我说区别了?

哎呀还是卖弄一下吧。

简单说,Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。

Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。

所以,如果你注意关心过存储系统的话,你会发现硬盘的读写缓冲/缓存名称是不一样的,叫write-buffer和read-cache。很明显地说出了两者的区别。

当然很多时候宏观上说两者可能是混用的。比如实际上memcached很多人就是拿来读写都用的。不少时候Non-SQL数据库也是。严格来说,CPU里的L2和L3 Cache也都是读写兼用——因为你没法简单地定义CPU用它们的方法是读还是写。硬盘里也是个典型例子,buffer和cache都在一块空间上,到底是buffer还是cache?

不过仔细想一下,你说拿cache做buffer用行不行?当然行,只要能控制cache淘汰逻辑就没有任何问题。那么拿buffer做cache用呢?貌似在很特殊的情况下,能确定访问顺序的时候,也是可以的。简单想一下就明白——buffer根据定义,需要随机存储吗?一般是不需要的。但cache一定要。所以大多数时候用cache代替buffer可以,反之就比较局限。这也是技术上说cache和buffer的关键区别。

——————
补充1:不要误解Buffer就是用来写的,Cache就是用来读的。读可以用Buffer吗?当然可以,比如你想一批一批地处理读取而非有啥处理啥的时候,就可以用读buffer。写当然也可以用cache,比如你的写入有很高的随机性的时候。具体什么场景用Buffer什么场景用Cache要根据场景的具体需要决定。

补充2:不要误解Cache或Buffer就一定是内存或者存在什么高速媒介上的东西。只要相对高速即可。我完全可以在硬盘上存Cache,比如有些游戏会在运行时建立预编译的shader(暴露年龄),这本质上就是一种cache,它存在速度缓慢的硬盘上,因为读硬盘依旧比重新编译要快。Buffer也同理,例如NTFS文件系统自己就有Logging Buffer,这个甚至明确拒绝放在任何易失缓存里。

转载于:https://www.cnblogs.com/jinanxiaolaohu/p/10647510.html

[转帖]buffer与cache的区别相关推荐

  1. Linux操作系统中内存buffer和cache的区别

    我们一开始,先从Free命令说起. free 命令相对于top 提供了更简洁的查看系统内存使用情况: $ free                      total  used   free  s ...

  2. Linux中内存buffer和cache的区别

    Linux中内存buffer和cache的区别 分类: LINUX 原文地址:Linux中内存buffer和cache的区别 作者:platinaluo 细心的朋友会注意到,当你在linux下频繁存取 ...

  3. Buffer和Cache的区别

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

  4. Linux内存buffer和cache的区别

    在Linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序.或是读取刚存取过 ...

  5. Linux操作系统中内存buffer和cache的区别--从free命令说起(转)

    原文链接:http://os.51cto.com/art/200709/56603.htm 我们一开始,先从Free命令说起. Free free 命令相对于top 提供了更简洁的查看系统内存使用情况 ...

  6. Linux中Buffer和Cache的区别

    今天我们再来讨论下linux系统中关于Buffer和Cache的区别,buffer与cache操作的对象就不一样. 1.buffer(缓冲) 是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速 ...

  7. linux配置内存buffer,Linux中内存buffer和cache的区别

    Linux中内存buffer和cache的区别 发布时间:2007-08-31 09:52:55来源:红联作者:ivepace free free 命令相对于top 提供了更简洁的查看系统内存使用情况 ...

  8. Linux下内存buffer和cache的区别

    滥觞:网海拾贝 Free free 命令相干于top 供应了更简便的查察体系内存运用环境:  $ free total used free shared buffers cachedMem: 2552 ...

  9. buffer 与cache 的区别

    A buffer is something that has yet to be "written" to disk. A cache is something that has ...

  10. buffer 和cache的区别

    Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器. 由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一 ...

最新文章

  1. 寻找优秀的程序员之实战指南-2
  2. 使用route-map 配置BGP本地优先级
  3. Cortex-M0微处理器之错误定位
  4. java参数注解pam_java – 使用xmlelement defaultvalue注释指定默认值的简单方法
  5. Scala AKKA入门示例
  6. 集成测试还原数据库_项目学生:分片集成测试数据
  7. springcloud官方文档_springcloud-microservice 快速构建分布式系统
  8. 这辈子最难忘的一顿饭是什么?
  9. SQL Server-外部联接基础
  10. 红米5a android,红米5A值得买吗?红米5A测评告诉你(附全文)
  11. Visual Basic从入门到精通pdf
  12. jna调取第三方dll实战(罗技G29)
  13. coreldraw16开三折页_cdr怎么制作三折页?cdrX6制作三折页模板教程
  14. 概念数据模型(E-R模型)
  15. 【表格】从1G到5G的移动通信发展历程(精简版)
  16. 高通 QSD MSM APQ区别
  17. PHP 开发杂谈:对后端开发的思考
  18. 相似度系列-5:语义方法:BERTSCORE: EVALUATING TEXT GENERATION WITH BERT
  19. 优秀的汽车后市场门店应该具备的数字化能力
  20. 聊聊支付通道那些事儿——介绍和接入

热门文章

  1. 拓端tecdat|R语言网络分析友谊悖论案例
  2. 代写python assignment经常用到的代码语法分享!
  3. vue登录页面ajax,springboot+vue 登录页面(三)
  4. x.view(-1,4)
  5. TypeError: unhashable type: ‘numpy.ndarray‘
  6. Pycharm教程--断点调试
  7. AspectJ中5种类型的增强注解有什么区别?
  8. react 翻书效果_react.js 翻页插件实例代码
  9. java IDEA 手动替换更新jar包
  10. DevOps使用教程 华为云(9)代码检查