内存中的 Buffer(缓冲区)和 Cache(缓存)区别

内存中的 Buffer(缓冲区)和 Cache(缓存)是 Linux 内存管理中两个核心概念,它们虽然都占用内存空间,但设计目的和工作原理有本质区别。下面这个表格能帮你快速把握它们的核心不同:

理解两者的作用

Buffer 的写入优化:当进程需要将数据写入磁盘时,如果每次有数据都直接写入,磁盘会不堪重负。Buffer 充当一个"临时集散地",将多个零散的小写操作在内存中合并成一个大的写操作,再一次性写入磁盘。这就像快递员不会每收到一个包裹就跑一趟物流中心,而是先放在驿站,攒够一车再统一运送,极大地减少了磁盘的机械寻道次数 。

Cache 的读取加速:当进程第一次从磁盘读取文件数据时,这些数据不仅会被送给进程,还会在内存的 Cache 区保留一个副本。当进程再次需要访问这些数据时,操作系统会优先在 Cache 中查找。如果命中(Cache Hit),数据将直接从内存提供,速度比从磁盘读取快几个数量级。这基于局部性原理:程序近期访问过的数据,很可能在短期内再次被访问

实际应用与观察

查看内存使用:在 Linux 系统中,可以使用 free -h命令查看内存整体使用情况,其中 buff/cache列就显示了 Buffer 和 Cache 的总和 。更详细的实时监控可以使用 vmstat命令,它能显示内存、I/O 等动态信息 。

手动清理缓存(需谨慎):在特殊情况下(如性能测试或遇到内存瓶颈),可以手动清理 Cache。但通常不建议在生产环境这样做,因为清理后系统性能会因 Cache 缺失而暂时下降。

sql 复制代码
# 清理页缓存、目录项和inode缓存(谨慎使用)
echo 3 > /proc/sys/vm/drop_caches

在执行此操作前,最好先运行 sync命令,确保 Buffer 中的脏数据写入磁盘,避免数据丢失

总结

简单来说,Buffer 关注的是"怎么写更高效",服务于写操作;而 Cache 关注的是"怎么读更快速",服务于读操作。它们都是操作系统为了弥补不同硬件组件之间巨大的速度差异而设计的智能中间层,通过巧妙利用内存空间,显著提升了系统的整体 I/O 性能 。

相关推荐
驾驭人生10 小时前
Hangfire.Redis.StackExchange 已归档停更!生产任务卡死、重复执行、网络抖动问题解决方案
数据库·redis·缓存
TDengine (老段)12 小时前
TDengine Catalog 与元数据缓存
大数据·数据库·物联网·缓存·时序数据库·tdengine
hui-梦苑15 小时前
[Gromacs]核心性能梯度测试:GROMACS 多线程性能调优实验
缓存·性能优化·多线程·gromacs·动力学模拟
Lyyaoo.17 小时前
【链表】【中等】两数相加/倒N删除/两个交换/排序链表/LRU缓存
数据结构·链表·缓存
努力努力再努力wz17 小时前
【Redis入门系列】:从 RESP 协议到 redis-plus-plus:Redis 客户端编程与 C++ 接口设计
开发语言·数据库·c++·redis·分布式·缓存·架构
OH_TPC2 天前
【鸿蒙优选三方库】@react-native-ohos/react-native-fast-image:高性能图片加载与缓存组件
缓存·华为·harmonyos·鸿蒙
liangshanbo12152 天前
手写 Event Emitter(事件发射器)
缓存
数智启示录2 天前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
2601_962297252 天前
python自带缓存lru_cache用法及扩展的使用_python
python·缓存·装饰器·lru_cache·my_cache
xixingzhe22 天前
SpringBoot 接口缓存实现
spring boot·后端·缓存