本文最后更新于6 天前,其中的信息可能已经过时,如有错误请发送邮件到2156936367@qq.com
Buffer(缓冲区)
目的:主要是为了解决写操作时速度不匹配问题(快慢同步)
应用场景:当两个设备或进程进行数据传输时,如果它们的速度不一致(一个快,一个慢),就需要 Buffer。
工作原理:数据从“快”的一端流向“慢”的一端时,先由 Buffer 接住,积累到一定量后,再统一发送给慢的一端;或者反之,慢的一端慢慢填满 Buffer,快的一端一次性取走。
举例:就像一个漏斗,上面就是buffer
典型场景:
- 将数据写入硬盘时(内存快,硬盘慢,先写到 Buffer,攒够了再落盘)。
- 网络数据包的传输(网卡缓冲区)。
Cache(缓存)
目的:主要是为了解决读操作时重复获取问题(提高访问速度)
应用场景:当某个数据被频繁使用,或者获取这个数据的代价很高(比如要从很远的服务器下载,或者要经过复杂的计算),我们就把它存在离使用者最近的地方。
工作原理:第一次读取数据时,虽然慢,但读完后保留一份副本在 Cache 中。下一次再需要同样的数据时,直接从 Cache 拿,不用再去源头取。
典型场景:
- CPU 的 L1/L2/L3 缓存。
- Redis / Memcached(数据库缓存)。
- 浏览器缓存。
在Linux中的两者
在现代Linux中,Buffer和Cache都由Page Cache统一管理
为什么 Linux free -h经常显示内存快满了,但 buff/cache 占用很高?
这是好事!Linux 的逻辑是:“空闲的内存就是浪费的内存”。如果你有没用的空闲内存,Linux 会自动把硬盘上读取过的文件存在 Cache 里。
- 如果你启动新程序需要内存,Linux 会瞬间释放这些 Cache 给程序用(Available 才是你真正可用的内存)。
- 如果不启动新程序,这些 Cache 能让你打开文件的速度飞快。

