buffer和cache有什么本质区别

 

在free命令展现机器的内存消耗状况,会像这样展现linux

 

 

 

 

buffered 和cached本质内容有什么区别呢?算法

 

 我没搞明白。我以为须要追根溯源会更加理解本质。数据库

 

英文是这样解释缓存

 

A buffer is something that has yet to be "written" to disk.  这些数据准备写到磁盘的,但尚未写到磁盘,缓存在内存中。优化

 

 

之因此有这样的机制,由于频繁地写入磁盘,会形成磁盘i/0,因此通常数据不会立刻写入到磁盘去,而是按期积累到必定量后写入磁盘去。spa

buffer的英文本意是缓冲器,缓冲一下,不要立刻写入到磁盘,冲击磁盘。操作系统

 

这个buffer大小由什么设置的呢? 不知道。待补充。内存

 

 

A cache is something that has been "read" from the disk and stored for later use.it

从磁盘上读取数据存储到内存中缓存起来,方便下一次使用。目的是避免频繁的去磁盘上读取数据,直接从内存中读取使用了。原理

之因此有cache,通常是对频繁使用到的数据(读的数据),进行缓存到内存。

 

 

------------------------------------------

从上面分析看,两个内存区域要解决的问题和目标都不一样。一个是解决频繁读的问题。另一个是解决频繁写入到磁盘的问题。

 

但相同点是:他们都是为了减小磁盘i/0次数。由于磁盘是机械性的旋转,靠磁头定位来读、写数据。频繁读、写磁盘,就会形成磁头频繁定位,这个就是磁盘i/0(数据库系统的实现里面有磁盘的原理介绍,而后专门讲解实现一个数据库系统如何针对磁盘作优化)

 

 

free命令中的used项(已经使用的内存),实际上是已经包含了buffer和cache部分

根据上面对buffer和cache的分析,buffer和cache部分其实是能够拿来使用的内存区(都是缓存数据,释放掉这部份内存空间并不影响)

正由于这样,为了想要准确得知到底有多少可用的内存,linux的free命令,会第二列专门给出减去buffer和cache部分的统计结果来看。

 

第二列 :-/+ buffers/cache

 

显示两个值,第一个值,是used-buffers-cache的计算结果。第二个值 是used+buffers+cache的计算结果

 

 

 

思考

从操做系统角度来看,它只关注真正的物理内存剩余多少。因此buffer区域和cache区域它也认为不是剩余的。这没有错。操做系统关注是物理内存真实有多少。

 

而应用程序角度来看,它关注的是有多少物理内存是本身能够调用的。它认为buffer和cache部分也是能够拿过来用的。也没有错误。

 

 

现实中例子用什么来形象化描述呢?

 

一我的有多少钱,站在不一样的角度算法不同。

 

有人存款10万。咱们只是看它真实钱有多少。那就是10万(操做系统这么认为)

而从另一个角度,他有房子,若是须要,房子能够卖掉,卖成钱,估算一下价格。假设房子80万,那么他的钱就是80+10=90万(应用程序这么认为)

 

两个计算方式都没有错。角度不一样。

 

buffer和cache,对于应用程序而言,以为这部分是能够回收的(我须要的时候随时能够用。房子随时能够套现拿到钱使用)

相关文章
相关标签/搜索