Linux - buff和cache的区别
创始人
2024-05-30 21:23:27
0

free -h命令可以查看内存的使用情况

[root@zabbix-server ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.8G        432M        894M         10M        492M        1.2G
Swap:          2.0G          0B        2.0G

为什么free 比 available要小?

free = total - used - shared - buff/cache

available=total -used

为什么需要buff/cache?

计算机三大核心组件:cpu,内存,硬盘

cpu的吞吐量每秒可以达到1000G以上

        每秒可以写入1000G的数据,同时可以往外吐1000G的数据

内存的吞吐率比cpu要低很多,虽然比cpu吞吐率低,但是也有每秒几千MB/s

硬盘的吞吐率:例如sata接口的硬盘吞吐率最大600MB/s ,

硬盘上存储了大量的程序,一个程序要执行,首先要把数据从硬盘读到内存,然后从内存读到CPU,cpu进行逻辑运算,然后将运算结果返回给内存,内存再写入硬盘,CPU是不能直接从硬盘读取数据的,原因之一就是CPU和硬盘之间的吞吐率差距太大了,CPU直接从硬盘读取数据效率太低了,此外,CPU在进行运算的时候是有会产生很多临时数据的,如果CPU先把数据写到内存再写到硬盘,内存中是有回收机制的,会自动清理掉临时数据,如果直接写入硬盘,那么临时数据也会写入硬盘保存起来,要清理只能手动清理,种种原因下,CPU是不会直接写数据到硬盘的。

 虽然CPU不直接将数据写入硬盘,但是CPU,内存,硬盘之间的吞吐率还是十分不对等,于是buff和cache就发挥了作用

内存的吞吐率由几千MB/s,而硬盘(sata)的吞吐率600M/s,内存往硬盘里面写数据的时候,处在内存和硬盘之间的buff缓冲区就起到了作用,内存往外吐数据的速度是很快的,硬盘往里面写的数据是很慢的,如果直接写的话肯定是会堵塞的,假设内存往硬盘写数据的速度是6000MB/s而硬盘往里面写数据的速度是600MB/s,那么数据肯定是不能及时写入的,如果一直就这么等待写入,数据是肯定有丢失的风险的,buff缓冲区就起到了一个水池的作用,内存先将数据写入缓冲区,然后再慢慢的写入硬盘,当然buff缓冲区的容量也是有极限的,如果一个程序产生了大量的数据将缓冲区也填满了的话,那就只能等待慢慢写入了。所以buff缓冲区就在内存和硬盘之间的一个不同吞吐率起到了一个平衡作用。

cache缓存区与buff缓冲区的方向相反, 内存写入数据的速度是很快的,但是硬盘往外面吐数据的数据相对来说还是比较慢的,如果内存一直等着硬盘将程序的数据读出来,那么程序就会一直处于等待状态,程序就会处于很卡的状态,影响程序的执行效率,cache缓存就是为了解决这个问题的,将经常需要从硬盘中读出的数据提前将它放到cache缓存区里面,然后内存需要数据的时候直接从cache缓存区获取数据,这样就能降低内存载入数据的时间,从而提高程序的执行效率。

 

 

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...