Estoy escribiendo un demonio de red, en Linux con kernel 2.6, que tiene proceso de un productor y N de consumidor procesa, que no hace ningún cambio en los datos, y no crea ninguna respuesta de vuelta al productor.comunicación entre procesos con resultados de memoria compartida copia cero?
Cuando el proceso de productor produce un objeto de datos, cuya longitud varía desde unos 10 bytes a unos 10 K-bytes, tiene que pasar el objeto de datos a un proceso de consumidor disponible.
primera vez, considera utilizar una tubería con nombre/sin nombre. Sin embargo, serían sobrecarga de copia de memoria.
- tampón de espacio de usuario del productor --copy -> kernel-espacio de amortiguación TUBO
- tampón de espacio de núcleo TUBO --copy -> de tampón de espacio de usuario del consumidor
Desde que el programa puede funcionar con un gran número de pares con baja latencia, la copia de sobrecarga podría ser dañina. Por lo tanto, decidí usar la memoria compartida POSIX con mmap().
Me pregunto si compartir datos entre procesos utilizando POSIX de memoria compartida con mmap() no da como resultado ninguna copia de memoria, a diferencia de PIPE.
Además, ¿hay alguna otra manera de compartir datos entre procesos, pero los resultados de copia cero? El programa se ejecutará en Linux con una versión reciente del núcleo y puede no tener que tener una capacidad multiplataforma.
Decidí no generar/ejecutar un hilo por cada consumidor/producto, pero un proceso debido a problemas de diseño.
Gracias por su respuesta.
Decidir cómo se mueven grandes cantidades de datos entre procesos no es una "optimización prematura", es una "arquitectura necesaria". No toda la optimización (o diseño, o arquitectura) es "prematura". –