0-копирование межпроцессного взаимодействия в Unix без использования файловой системы - PullRequest
1 голос
/ 26 июля 2011

Если мне нужно переместить умеренный объем памяти между двумя процессами, я могу сделать следующее:

  • создать файл для записи
  • ftruncate до нужного размера
  • mmap и отсоедините его
  • используйте по желанию

Когда другому процессу требуются эти данные, он:

  • подключается к первому процессу черезсокет unix
  • первый процесс отправляет fd файла через сообщение сокета unix
  • mmap, который fd
  • использует по желанию

Thisпозволяет нам перемещать память между процессами без какой-либо копии - но созданный файл должен находиться в файловой системе, смонтированной в памяти, в противном случае мы можем получить удар по диску, что приведет к снижению производительности.Есть ли способ сделать что-то подобное без использования файловой системы?Malloc-подобная функция, которая возвращает fd вместе с указателем, сделает это.

[ Edit ] Наличие дескриптора файла обеспечивает также механизм подсчета ссылок, который поддерживается ядром.

1 Ответ

4 голосов
/ 26 июля 2011

Что-то не так с System V или POSIX разделяемой памятью (которые несколько отличаются, но в конечном итоге дают тот же результат)?В любой такой системе вам нужно беспокоиться о координации между процессами, когда они обращаются к памяти, но это верно и для файлов, отображаемых в память.

...