Tengo 2 aplicaciones:
- Productor (N instancias)
- Consumidor (1 instancia)
Actualmente escribo resultados intermedios de los productores, y luego el consumidor lee estos archivos del disco y produce un resultado final .
Me gustaría minimizar esta E / S "transmitiendo" los resultados de los productores directamente al consumidor.
Me encontré con tuberías con nombre (mkfifo) y un ejemplo posterior aquí . Esto se ve muy bien, pero lo que no puedo determinar es cómo se implementa realmente. ¿Se está almacenando la cola FIFO en un archivo? Si es así, eso probablemente no me ayudaría. Me gustaría que el contenido se transmita "a través de la memoria" por completo sin utilizar el disco. ¿Quizás esto no sea posible en todos los procesos?
Realmente no importa si su resultado está respaldado en disco o no, porque si hay suficiente memoria disponible, de todos modos se almacenará en caché y no se realizará ninguna E / S de disco real. Por el contrario, si tiene respaldo de memoria y no hay suficiente memoria disponible, podría cambiarse al disco.
Si tuviera que adivinar, diría que la tubería está realmente basada en la memoria, pero entonces, esto solo debería cambiar si los datos en cola se conservan entre los reinicios.
Lo que debe tener en cuenta es que, dado que tiene varios productores, sus escritos deben ser atómicos para que no se intercalen en la cola. Consulte
man 7 pipe
para obtener detalles sobre cómo asegurarse de que una escritura sea atómica.fuente