I/O 模型 05 - 内存映射

内存映射

Linux 内核提供一种访问磁盘文件的特殊方式,它可以将内存中的某块地址空间和我们要指定的磁盘文件相关联, 从而把我们对这块内存的访问转换为对磁盘文件的访问,这种技术称为内存映射(Memory Mapping)。

在大多数情况下,使用内存映射可以提高磁盘 I/O 的性能,它无须使用 read() 或 write() 等系统调用来访问文件, 而是通过 mmap() 系统调用来建立内存和磁盘文件的关联,然后像访问内存一样自由地访问文件。

有两种类型的内存映射,共享型和私有型, 前者可以将任何对内存的写操作都同步到磁盘文件,而且所有映射同一个文件的进程都共享任意一个进程对映射内存的的修改; 后者映射的文件只能是只读文件,所以不可以将对内存的写同步到文件,而且多个进程不共享修改。 显然,共享型内存映射的效率偏低,因为如果一个文件被很多进程映射,那么每次的修改将花费的一定的开销。

Ref

摘自《构建高性能 Web 站点》第 3 章 服务器并发处理能力 3.6 I/O 模型