сегмент общей памяти против объекта общей памяти



В чем разница между объектом общей памяти (созданным с помощью shm_open) и сегментом общей памяти(shmget)?



Есть ли у них какие-либо ограничения, которые нельзя настроить, как в случае с общей памятью shmmax и shmall?



Существуют ли какие-либо различия в производительности между этими двумя сценариями, и в каких сценариях IPC они должны использоваться?

522   2  

2 ответов:

"shmget" -это специфичный для Linux метод выделения общей памяти, реализованный в ядре Linux.

"shm_open" - это библиотечная функция, которая эмулирует общую память путем сопоставления файлов с помощью mmap. Поскольку файлы сопоставляются с помощью флага "shared", память распределяется между процессами.

В Linux 1.X каталог " /dev/shm "(содержащий файлы) был обычным каталогом, поэтому общая память, использующая" shm_open", действительно была дисковыми файлами. В Linux 3.x "/ dev/shm " - это a специальный каталог, чтобы избежать того, что общая память действительно должна быть записана на диск.

Я думаю, что оба метода могут быть заменены другим. Только по историческим причинам существуют два различных метода создания общей памяти.

В ходе тестирования я обнаружил, что память, доступная через shm_open, быстрее, чем память, доступная через shmget. Кроме того, они довольно похожи с точки зрения особенностей. Между ними должны быть какие-то тонкие различия в тайниках или TLB, но я не знаком с деталями под капотом.

Примечание мне пришлось использовать опцию заполнения для shm_open, чтобы получить это повышение производительности.

Comments

    Ничего не найдено.