Назад | Перейти на главную страницу

Использование APC, скомпилированного с помощью mmap, для управления сеансом

Если APC настроен на использование mmap, означает ли это, что виртуальная память будет отображена на диск, и я не буду использовать физическую память?

Поскольку мои потребности очень простые, вместо того, чтобы использовать memcached для реализации управления сеансом на основе памяти, я написал собственный обработчик сеанса для APC, но мне кажется, что установка APC на основе mmap по-прежнему будет записывать и читать с диска, а мой настраиваемый сеанс управление действительно будет не лучше или быстрее, чем управление сеансами файлов по умолчанию. Я неправильно истолковываю mmap?

По сути, mmap очень разумно использует память. Вы сопоставляете файл с памятью с помощью mmap, и только те биты файла, которые вы действительно читаете, попадают в память. И даже лучше, если несколько процессов отображают один и тот же файл, это одна и та же область памяти. Когда вы записываете в эту оперативную память, mmap не будет немедленно записывать на диск, он может какое-то время хранить эту версию вещей.

  • mmap для одного процесса может уменьшить дисковый ввод-вывод. Если вы измените один и тот же блок дважды, возможно, он будет записан на диск только один раз.
  • mmap может сэкономить физическую память, потому что в память читаются только те блоки, к которым вы имеете доступ. (что также может быть экономией дискового ввода-вывода)
  • mmap это просто восхитительно если у вас есть несколько процессов, использующих один и тот же файл через mmap. Они разделяют единственную копию этого файла в памяти. Это можно использовать для межпроцессного взаимодействия, и именно так разделяемые библиотеки в Linux используют только одну копию библиотеки в памяти.

Единственный способ быть уверенным - это протестировать (эталонный тест), но я ожидаю, что mmap будет работать для обработки сеанса, если вы правильно обрабатываете блокировку.