外观
一句话答案
mmap 将文件映射到进程虚拟地址空间,读写内存即读写文件,减少一次用户/内核态数据拷贝,RocketMQ 使用。
核心要点
原理: 建立虚拟地址 → 文件页的映射,访问时触发缺页加载
应用: RocketMQ(消息存储) / MongoDB(存储引擎) / 共享内存(进程通信)
vs read/write: mmap 少一次拷贝,适合大文件随机读写
追问与易错
追问方向:
- mmap 和 read 区别?
- 适合什么场景?
- RocketMQ 为什么用 mmap?
易错点:
- ❌ mmap 比 read 永远快——小文件不一定
- ❌ mmap 不占内存——占虚拟地址空间
💡 记忆锚点
mmap像在文件和内存之间开了一扇"任意门":把文件直接映射到进程地址空间,读写内存就等于读写文件,省掉了传统read/write中"内核缓冲区→用户缓冲区"的那一次搬运。访问时才按需加载(缺页中断),适合大文件随机读写。RocketMQ用它做消息存储,MongoDB用它做存储引擎。