Buffer(缓冲)

Buffer(缓冲)是为了提高内存和硬盘(或者其他I/O设备)之间的数据交换的速度而设计的。根据磁盘的读写设计的。把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,提高性能。

主要目的进行流量×××,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以*减少响应次数*,通常其中的数据在操作完成之后,buffer不会被继续使用;(比如从网上下电影,你不能下一点点数据就写一下硬盘,而是积攒一定量的数据以后一整块一起写,不然硬盘都要被你玩坏了)缓和冲击嘛。再比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓存。

Cache(缓存)

Cache(缓存)是为了提高CPU和内存之间的数据交换速度而设计的。也就是平常见到的一、二、三级缓存。CPU在执行程序所用的指令和读取数据都是针对内存的,速度比内存块,造价高,且CPU内不能集成太多集成电路,所以一般cache会比较小。为提高速度,增加了二、三级cache,根据程序的局部性原理而设计的,就是CPU执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,CPU就不用再访问内存了。若cache中没有CPU所需要的内容,还要访问内存。

主要作用在于更好地利用局部性原理,减少不必要的I/O,避免代价。加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。

对比

如果你注意关心过存储系统的话,你会发现硬盘的读写缓冲/缓存名称是不一样的,叫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的关键区别。

结论

  Buffer和Cache都只是相对的概念

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

Cache或Buffer也不一定就是内存或者存在什么高速媒介上的东西。只要相对高速即可。我完全可以在硬盘上存Cache,比如有些游戏会在运行时建立预编译的shader,这本质上就是一种cache,它存在速度缓慢的硬盘上,因为读硬盘依旧比重新编译要快。Buffer也同理。

转载于:https://blog.51cto.com/jinyudong/1901001

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. buffer 与cache 的区别

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

  5. Linux内存中的 buffer 和 cache

    Linux内存中的 buffer 和 cache 到底是个什么东东? Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buff ...

  6. Linux内存buffer和cache的区别

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

  7. Linux下的buffer与cache

    最近在做监控项目的时候,有同事跟我说"你看Linux性能也不好嘛,内存使用率总是达到80%,我在windows下也没这种状况",我跟他解释,因为Linux系统,是尽可能的使用内存, ...

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

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

  9. linux清理swap内容,Linux如何清理swap.buffer及cache等缓存

    swap清理: 代码如下: swapoff -a && swapon -a 注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大 cache清理: 代码如下: sync ...

  10. 16 | 基础篇:怎么理解内存中的Buffer和Cache?

    上一节,我们梳理了 Linux 内存管理的基本原理,并学会了用 free 和 top 等工具,来查看系统和进程的内存使用情况. 在今天的内容开始之前,我们先来回顾一下系统的内存使用情况,比如下面这个 ...

最新文章

  1. 基于React与Redux的留言墙的实现
  2. 其它综合-VMware虚拟机安装Ubuntu 19.04 版本
  3. 音视频播放、录音、拍照
  4. iview表格嵌套Tooltip
  5. 4.[attribute!=value]属性选择器
  6. Python使用matplotlib可视化模拟商场促销价格关系折线图
  7. oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
  8. 【思科模拟器基本使用】
  9. fluent二维叶型仿真_公开课 l 基于SCORG的双螺杆压缩机流体仿真分析应用
  10. 疑为灵异现象不可思议的透明液晶揭秘
  11. 让你提前认识软件开发(39):软件研发之殇
  12. linux 进程状态 dw,Linux之PID状态信息是如何来的之详解PID stat文件
  13. 使用 MyBatis 的 Maven 插件生成代码
  14. 司马谈《论六家要旨》品读
  15. 软件架构设计最佳实践(课程大纲)
  16. 伯努利分布(二项分布)的假设检验
  17. gulp自动化环境搭建,自动化解决方案
  18. win7下将rtt1.2.0移植到4088开发板上
  19. with open相关用法
  20. c语言拨号程序代码,c语言完成宽带拨号

热门文章

  1. 中南大学计算机学院夏令营2021,baihhh
  2. 监控linux终端键盘输入,Linux内核实时监控键盘输入
  3. RabbitMQ入门学习系列(三).消息发送接收
  4. 《你不常用的c#之五》:Thread与ThreadPool的内存之战
  5. CSS: SASS用法指南 (附视频)
  6. LESS vs SASS?选择哪种CSS样式编程语言?
  7. 15个带示例的jQuery滚动条插件
  8. JavaScript判断浏览器 Browser detect
  9. 写你自己的MVC框架
  10. python——socket实现简单C/S交互开发