Cache和Buffer的区别-程序员宅基地

技术标签: 操作系统  

结合文章:RAM、ROM、高速缓冲存储区别与联系

 内存在电脑中起着举足轻重的作用。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM是其中最重要的存储器,所以通常所说的内存即指电脑系统中的RAM。

    RAM要求每时每刻都不断地供电,否则数据会丢失。如果在关闭电源以后RAM中的数据也不丢失就好了,这样就可以在每一次开机时都保证电脑处于上一次关机的状态,而不必每次都重新启动电脑,重新打开应用程序了。但是RAM要求不断的电源供应,那有没有办法解决这个问题呢?随着技术的进步,人们想到了一个办法,即给RAM供应少量的电源保持RAM的数据不丢失,这就是电脑的休眠功能,特别在Win2000里这个功能得到了很好的应用,休眠时电源处于连接状态,但是耗费少量的电能。

    硬盘与内存的区别是很大的,这里只谈最主要的三点:一、内存是计算机的工作场所,硬盘用来存放暂时不用的信息。二、内存是半导体材料制作,硬盘是磁性材料制作。三、内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。内存与硬盘的联系也非常密切,这里只提一点:硬盘上的信息永远是暂时不用的,要用吗?请装入内存!CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。

    内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬(磁)盘。在进一步理解它之前,还应认识一下它的物理概念。●只读存储器(ROM) ROM表示只读存储器(Read Only Memory),在制造ROM的时候,信息(数据或程序)就被存入并永久保存。这些信息只能读出,一般不能写入,即使机器掉电,这些数据也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。其物理外形一般是双列直插式(DIP)的集成块。 ●随机存储器(RAM) 随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。●高速缓冲存储器(Cache) Cache也是我们经常遇到的概念,它位于CPU与内存之间,是一个读写速度比内存更快的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。

    内存与储存的差别:大多数人常将内存 (Memory) 与储存空间 (Storage) 两个名字混为一谈,尤其是在谈到两者的容量的时候。 内存是指 (Memory) 计算机中所安装的随机存取内存的容量,储存 (Storage) 是指计算机内硬盘的容量。

    从计算机的体系结构来讲,硬盘应当是计算机的“外存”。内存应当是计算机内部(在主板上)的一些存储器,用来保存CPU运算使用过程中的中间数据和计算结果,当不用这些数据时,它们被保存在硬盘上。在计算机业界,内存这个名词被广泛用来称呼 RAM( 随机存取内存 ) 。

一、

1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。

    Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

2. Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。

二、

Buffer和Cache翻译成中文分别是“缓冲”和“缓存”。buffer和cache都是一部分内存,内存的作用就是缓解CPU和IO(如,磁盘)的速度差距的。CPU计算了一些数据后,在内存中进行临时存放,到一定数量后再统一放到硬盘中,这时要用的内存就是buffer;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。 
cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到加快访问速度的作用。而 buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数(比如从网上下电影,你不能下一点点数据就写一下硬盘,而是积攒一定量的数据以后一整块一起写,不然硬盘都要被你玩坏了)。

三、

buffer 与cache 的区别
A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.

 

两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,cache是被从磁盘中读出来的。
buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。

 

 

引用文章1:

buffer和cache的区别

一,计算机硬件组成

计算机硬件组成:CPU,存储器,输入输出设备(I/O),其他(主板,电源等)
CPU:运算器,控制器
存储器:内部存储器(ROM/RAM),外部存储器(磁盘等)
I/O:输入设备(鼠标/键盘),输出设备(显示器/打印机)

从性能分析:
-CPU缓存>内存>磁盘>数据库
从性能来看内存是介于CPU和磁盘,在实际中内存是CPU和磁盘的桥梁。buffer和cache是内存的不同的体现,接下来简单分析对buffer和cache的理解。


二,buffer和cache

1.buffer:
A buffer is something that has yet to be "written" to disk.翻译过来就是:buffer就是写入到磁盘。buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。buffer将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。


2.cache:
A cache is something that has been "read" from the disk and stored for later use.翻译过来就是:cache就是从磁盘读取数据然后存起来方便以后使用。cache实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。


3.buffer和cache的特点
共性:
都属于内存,数据都是临时的,一旦关机数据都会丢失。

差异:(先理解前两点,后两点有兴趣可以了解)
A.buffer是要写入数据;cache是已读取数据。
B.buffer数据丢失会影响数据完整性,源数据不受影响;cache数据丢失不会影响数据完整性,但会影响性能。
C.一般来说cache越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低。buffer来说,空间越大性能影响不大,够用就行。cache过小,或者没有cache,不影响程序逻辑(高并发cache过小或者丢失导致系统忙死除外)。buffer过小有时候会影响程序逻辑,如导致网络丢包。
D.cache可以做到应用透明,编写应用的可以不用管是否有cache,可以在应用做好之后再上cache。当然开发者显式使用cache也行。buffer需要编写应用的人设计,是程序的一部分。


三.关于buffer和cache测试

buffer前者针对磁盘块的读写,cache针对文件inode的读写
sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。

cache释放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

说明,释放前较好sync一下,防止丢数据。
因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。

buffer和cache的区别
buffer和cache的区别
如上图所示,当新写入一个test.txt时,buff/cache这条有83M增加到186,
执行sync和echo 3 > /proc/sys/vm/drop_caches后,减小到71M,主要是echo 3 > /proc/sys/vm/drop_caches起到的作用,说明cache释放了100多M。

四.linux系统如何查看内存

查看的内存的方式有很多种,萝卜青菜各有所爱,所有我介绍几种,可以根据个人喜欢选择。
从图形化到命令的顺序简单介绍。

1.gnome-system-monitor
显示CPU历史,内存和交换历史,以及网络历史。能实时查看内存的使用情况,但是没能看到buffer和cache的使用情况。
buffer和cache的区别

  1. cat /proc/meminfo
    查看动态更新的虚拟文件。内容比较全面,可以查看到许多关于内存的信息。
    buffer和cache的区别
    3.free
    快速查看内存的方法,也是经常使用的命令。-h 更人性化的显示内存的单位 -m 以M的形式显示
    buffer和cache的区别

4.top
top命令提供了实时的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。
buffer和cache的区别
5.sar
Linux统计/监控工具sar详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
buffer和cache的区别
论坛参考:https://www.zhihu.com/question/26190832
英文参考:http://www.differencebetween.net/technology/hardware-technology/difference-between-cache-and-buffer/

 

引用文章2:

Cache vs Buffer 高速缓存和缓冲区

缓存区cache和缓冲区buffer都是临时存储区,但它们在许多方面有所不同。缓冲区buffer主要存在于RAM中,作为CPU暂时存储数据的区域,例如,当计算机和其他设备具有不同的速度时buffer存储着缓冲的数据, 这样计算机就可以完成其他任务了。另一方面,高速缓存cache是一种高速存储区域,可以是主存或硬盘等其他独立存储区域的一部分。这两种缓存方法分别被称为内存缓存和磁盘缓存。

cache在cpu和内存之间,它的速度比内存快,但是造价高 
为了确保高速,缓存cache是由静态RAM而不是动态RAM。这个区域用来存储几乎所有程序在运行时所访问的信息,这使得它更快,而不是每次程序运行时从磁盘中搜索这些信息,因为这将慢得多。缓冲区buffer是由普通RAM的计算机上运行,并跟踪正在运行的程序发生变化的暂时存储在变化最终被保存在磁盘上,例如,文字处理器的任务被写入首先读取从存储在缓冲区中的数据,和然后文字处理器更新在缓冲区的内容。

缓冲区buffer主要用于输入/输出(I/O)过程,例如,在打印中。当一个发送给打印机打印的文件时,信息被存储在一个缓冲区中,然后打印机就可以按照自己的步调访问这些信息,这样可以释放CPU来执行其他任务。在将一些信息(burning information)存储到光盘上时,也会使用缓冲区,其中被数据首先存储在缓冲区中,然后在过程中将其传输到磁盘。缓存buffer主要用于读取和写入主磁盘过程中,通过使不同程序所使用的类似数据易于访问而使进程更快。

缓存Cache可以是RAM的一部分,也可以是磁盘的一部分。当主磁盘用作缓存时,该过程称为磁盘缓存,这也用作内存缓存,其中最近使用的数据存储在磁盘缓存中。如果正在运行的程序希望从磁盘访问数据,它首先检查磁盘缓存,如果磁盘缓存中所需数据不可用,则只检查磁盘。这使得数据访问过程快得多,因为从磁盘访问速度慢得多。缓冲区Buffer只能是RAM的一部分。

总结:

1、Cache是高速存储区域,而Buffer是RAM的临时存储的正常存储区域。

2、Cache是由静态RAM构成的,它比Buffer较慢的动态RAM更快。

3、Buffer主要用于输入/输出过程,而Cache则用于从磁盘读取和写入进程。

4、Cache也可以是磁盘的一部分,而Buffer只是RAM的一部分。

5、在Cache不能使用的情况下,可以在键盘中使用Buffer来编辑打字错误。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/w892824196/article/details/81979654

智能推荐

Echarts 中文 API说明文档_echarts中文api-程序员宅基地

文章浏览阅读1.5w次,点赞10次,收藏32次。官网链接:http://echarts.baidu.com/echarts2/doc/example/themeDesigner.htmlhttps://www.echartsjs.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20EChartstheme = { // 全图默认背景 // backgro..._echarts中文api

爬虫知识——第三方库Beautiful Soup4 使用总结_beautiful soup 4-程序员宅基地

文章浏览阅读1.6k次。一、Beautiful Soup4简介这个第三方库可以帮助我们来处理请求下来的HTML页面中的数据,如果你之前有过前端开发的经验或者是熟悉HTML标记语言和CSS语言的话,那么基本上可以无缝对接地使用这个第三方库来帮助你处理数据,继而完成我们的爬虫。这里我们会给出Beautiful Soup4的中文文档,学习Pyhton到现在,提供这么详细中文文档的第三方库,还真是不多。如果大家想详细了解学习..._beautiful soup 4

android仿QQ点击加号弹出菜单特效-程序员宅基地

文章浏览阅读8.1k次,点赞3次,收藏2次。android仿QQ点击加号弹出菜单特效

snprintf 返回值陷阱 重新封装-程序员宅基地

文章浏览阅读1k次。snprintf()函数用于将格式化的数据写入字符串,其原型为: int snprintf(char *str, int n, char * format [, argument, ...]);str为要写入的目标字符串;n为能写入的字符的最大数目,超过n会被截断,包括'\0'符,所以能最大写入的其实是n-1个字符;format为格式化字..._snprintf返回值 陷阱

Pygame实战:升级后的2048小游戏—解锁新花样,根本停不下来【附源码】_2048 pygame_顾木子吖的博客-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏14次。导语“嗨嗨嗨!别睡了,醒醒醒醒!该干活儿了~” by——顾木子吖!“刚睡醒,大佬你有什么事儿吖?” by——全体成员!上期给大家分享的超详细——简易版本的2048都吃透了没?咳咳咳......没吃透也没关系!慢慢来,木木子一直在等你们崛起~哈哈哈哈 ,呐~ 现在这篇文章..._2048 pygame

java nosuchfilederror 或者nosuchmethederror-程序员宅基地

文章浏览阅读4.5k次。如果出现nosuchfilederror 或者nosuchmethederror 说明缺少包或者包冲突,或者依赖版本高低问题。排查1先看有没有此类或者查看发布过的lib下有没有此类所在的jar,2查看此类所在的jar在发布后的lib下是否有多个版本包,3查看此类所在jar所依赖的包版本在发布后的lib下是否匹配。

随便推点

HBase源代码分析之HRegion上MemStore的flsuh流程(二)-程序员宅基地

文章浏览阅读105次。 继上篇《HBase源代码分析之HRegion上MemStore的flsuh流程(一)》之后。我们继续分析下HRegion上MemStore flush的核心方法internalFlushcache()。它的主要流程如图所看到的: 当中。internalFlushcache()方法的代码例如以下:/** * Flush the mems...

DOS命令窗口常用命令语句_电脑命令窗口代码_做一道光的博客-程序员宅基地

文章浏览阅读1.3k次。首先WIN键+R键打开运行窗口,输入cmd打开DOS命令窗口。cd+路径:转到输入路径文件目录;dir:展示当前路径下的所有文件目录;cls:清除DOS命令窗口的所有内容;exit:退出DOS命令窗口;ipconfig:查看当前网络连接;文件名+-version:查看文件版本;搜索文件时,如果在当前路径找不到该文件,则去path配置的环境变量中查找。#盘符切换 (盘号加:)#查看当前目录下的所有文件 (dir)#切换目录 (cd change direc..._电脑命令窗口代码

jquery 插件收集-程序员宅基地

文章浏览阅读1k次。1.页面延期载入图片插件【使用过】http://www.appelsiini.net/projects/lazyload滚动条滚动时才会去加载图片2.当前页面的图片展示插件http://demo.tutorialzine.com/2009/09/cool-jquery-gallery/demo.phphttp://codecanyon.net/item/jquery-light

android socket聊天室——也不仅仅是聊天室-程序员宅基地

文章浏览阅读181次。前提概要笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对socket的使用却让笔者感觉socket强大无比,可以实现诸多功能。个人Socket体验项目主要有关智能家居,需要实现多台手机同时对灯进行操作(开或者关),主要需要实现以下几点: 1、进入界面时获取所有灯的状态。 2、一台手机...

Angular2进阶(一)——如何避免Dom误区-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏2次。Angular2的设计目标本来就是要让浏览器和DOM独立。DOM是复杂的,因此使组件与它分离,会让我们的应用程序,更容易测试和重构。为了支持跨平台,Angular还通过抽象封装了不同平台的差异。

NYOJ鸡兔同笼-程序员宅基地

文章浏览阅读235次。#include int main (){int a,b,c,e,f,k;scanf ("%d",&a);while (a>0&&ascanf ("%d %d",&b,&c);k=0;for(e=0;eif (2*e+4*(b-e)==c){printf("%d %d\n",e,b-e);k=1;}}if(k==0)printf ("No a