Intereting Posts
переименование каталога и его поддиректоров, не затрагивая их файлы Fish-Shell не сохранит мои псевдонимы Как отсортировать обновления по дате выпуска при тестировании debian? Как запустить несколько параллельных экземпляров Tomcat в CentOS 6? Как я могу создать и установить PL / R как непривилегированный пользователь? "Nl80211: 'nl80211' generic netlink not found" при запуске hostapd добавление дополнительных прыжков в traceroute6 на OpenBSD Как получить имя компьютера (а не имя хоста)? Postfix отправляет и получает почту локально, но не внешнему почтовому ящику Измерение, сколько энергии требуется для беспроводного подключения Запуск прозрачного прокси для локальной сети и веб-сервера для WAN Когда я могу редактировать строки в исполняемом двоичном файле? Права Linux на смонтированные акции Как использовать неиспользуемое пространство на моем загрузочном диске в FreeBSD index.html не работает в корневом каталоге apache

Получают ли регулярные чтения преимущества от mmap?

Если я использую mmap для некоторого файлового дескриптора fd, будут ли регулярные вызовы read () быть «осведомленными» о том, что есть отображение памяти в файл и чтение из памяти напрямую?

Что делать, если mlock () используется после mmap (). Правильно ли утверждать, что никакое последующее чтение () в файле никогда не понадобится для доступа к диску?

Я думаю, это зависит от того, что вы подразумеваете под «осознанием».

Поскольку системный вызов read() является запросом к ядру, чтобы скопировать содержимое файла, начиная с текущей позиции, в указанный буфер памяти программы, read() в обычном файле выполнит эту задачу так же, как или не существует одновременно сопоставление памяти файла. Нет «осознания».

Теперь это файл как mmap() ed, так и read() , может быть достигнута оптимизация производительности. Например, если файл сначала read() , то разделы файла, которые были прочитаны, вероятно, уже находятся в кеше страницы, и впоследствии доступ к карте памяти не будет иметь к ним доступ снова с диска. Или, наоборот, если есть отображение памяти, которое уже было выгружено, последующее read() больше не нужно будет возвращать на диск. Таким образом, в этом смысле вы можете в некотором смысле рассмотреть mmap() и read() «осознавать» друг друга.