Я пишу сетевой демон для Linux с ядром 2.6, который имеет один производственный процесс и N из потребительских процессов , которые не вносят никаких изменений в данные и не создают никакого ответа производителю.
Каждый раз, когда производственный процесс производит объект данных, длина которого варьируется от нескольких 10 байтов до нескольких 10 Кбайт, он должен передать объект данных в один доступный процесс-потребитель.
В первый раз я решил использовать именованный / безымянный PIPE. Однако, они будут накладными расходами на копирование памяти.
Поскольку программа может работать с большим количеством пиров с низкой задержкой, накладные расходы на копирование могут быть вредными. Таким образом, я решил использовать совместно используемую память POSIX с mmap ().
Мне просто интересно, не приводит ли совместное использование данных между процессами, использующими совместно используемую память POSIX с mmap (), какой-либо копии памяти , в отличие от PIPE.
Кроме того, есть ли какой-либо другой способ обмена данными между процессами, но с нулевым копированием? Программа будет работать в Linux с последней версией ядра. и, возможно, не обязательно иметь кросс-платформенную способность.
Я решил не порождать / запускать поток для каждого потребителя / продукта, а процесс из-за проблем с дизайном.
Спасибо за ответ.