обмен данными между процессами с общей памятью результаты с нулевым копированием?

Я пишу сетевой демон для Linux с ядром 2.6, который имеет один производственный процесс и N из потребительских процессов , которые не вносят никаких изменений в данные и не создают никакого ответа производителю.

Каждый раз, когда производственный процесс производит объект данных, длина которого варьируется от нескольких 10 байтов до нескольких 10 Кбайт, он должен передать объект данных в один доступный процесс-потребитель.

В первый раз я решил использовать именованный / безымянный PIPE. Однако, они будут накладными расходами на копирование памяти.

  1. буфер пространства пользователя производителя --copy -> буфер PIPE пространства ядра
  2. буфер PIPE пространства ядра --copy -> буфер пользовательского пространства потребителя

Поскольку программа может работать с большим количеством пиров с низкой задержкой, накладные расходы на копирование могут быть вредными. Таким образом, я решил использовать совместно используемую память POSIX с mmap ().

Мне просто интересно, не приводит ли совместное использование данных между процессами, использующими совместно используемую память POSIX с mmap (), какой-либо копии памяти , в отличие от PIPE.

Кроме того, есть ли какой-либо другой способ обмена данными между процессами, но с нулевым копированием? Программа будет работать в Linux с последней версией ядра. и, возможно, не обязательно иметь кросс-платформенную способность.

Я решил не порождать / запускать поток для каждого потребителя / продукта, а процесс из-за проблем с дизайном.

Спасибо за ответ.

9
задан ddoman 26 February 2011 в 23:37
поделиться