![使用 mmap 编译的 APC 进行会话管理](https://linux22.com/image/523612/%E4%BD%BF%E7%94%A8%20mmap%20%E7%BC%96%E8%AF%91%E7%9A%84%20APC%20%E8%BF%9B%E8%A1%8C%E4%BC%9A%E8%AF%9D%E7%AE%A1%E7%90%86.png)
如果 APC 配置为使用 mmap,是否意味着虚拟内存将被映射到磁盘并且我将不会使用物理内存?
由于我的需求非常基本,因此我没有使用 memcached 来实现基于内存的会话管理,而是为 APC 编写了一个自定义会话处理程序,但在我看来,基于 mmap 的 APC 安装仍将写入和读取磁盘,而我的自定义会话管理实际上不会比默认文件会话管理更好或更快。我误解了 mmap 吗?
答案1
基本上,mmap 在内存使用方面非常智能。您可以使用 mmap 将文件映射到内存,并且只有您实际读取的文件位才会进入内存。更好的是,如果多个进程 mmap 同一个文件,则它们是同一块内存区域。当您写入该 RAM 时,mmap 不会立即写入磁盘,它可能会保留该版本的内容一段时间。
- 单个进程的 mmap可以减少磁盘 I/O。如果您更改同一个块两次,则可能只会写入磁盘一次。
- 映射可以节省物理内存,因为只有您访问的块才会被读入内存。(这也可以节省磁盘 I/O)
- mmap 是非常棒如果有多个进程通过 mmap 使用同一个文件。它们在内存中共享该文件的单个副本。这可用于进程间通信,并且是 Linux 上的共享库在内存中仅使用库的单个副本的方式。
唯一确定的方法是测试(基准测试),但我希望只要您正确处理锁定,mmap 就可以用于会话处理。