sincronizacion semaforos semaforo programa procesos mensajes memoria hijo concepto con compartida colas linux ipc pipe shared-memory

linux - semaforos - Cuándo usar tuberías vs Cuándo usar memoria compartida



semaforo en c linux (1)

Estoy leyendo sobre varios mecanismos de IPC. Estoy tratando de averiguar los escenarios, donde usamos la memoria compartida y donde usamos tuberías con nombre (FIFO).

Tubos: proceso múltiple puede escribir, sin embargo, solo un proceso puede leer. La operación de escritura es atómica.

Memoria compartida: proceso múltiple puede leer y escribir. Y también el usuario debe proporcionar la exclusión mutua para leer y escribir.

¿Es esta la única diferencia de aplicación de memoria compartida y pipe?


Esencialmente, las canalizaciones, ya sean nombradas o anónimas, se usan como paso de mensajes. Alguien envía una información al destinatario y el destinatario puede recibirla. La memoria compartida se parece más a la publicación de datos: alguien coloca los datos en la memoria compartida y los lectores (potencialmente muchos) deben usar la sincronización, por ejemplo, a través de semáforos para aprender sobre el hecho de que hay nuevos datos y deben saber cómo leer la región de la memoria para encontrar la información. .

Con las tuberías, la sincronización es simple y está integrada en el propio mecanismo de la tubería: sus lecturas y escrituras congelarán y descongelarán la aplicación cuando suceda algo interesante. Con la memoria compartida, es más fácil trabajar de forma asíncrona y comprobar los datos nuevos solo de vez en cuando, pero a un costo de un código mucho más complejo. Además, puede obtener comunicación de muchos a muchos, pero requiere más trabajo nuevamente. Además, debido a lo anterior, la depuración de la comunicación basada en tuberías es más fácil que la depuración de la memoria compartida.

Una pequeña diferencia es que los quince están visibles directamente en el sistema de archivos, mientras que las regiones de memoria compartida necesitan herramientas especiales como ipcs para su gestión, por ejemplo, si creas un segmento de memoria compartida pero tu aplicación muere y no se limpia después de sí misma (lo mismo ocurre con los semáforos). y muchos otros mecanismos de sincronización que puede necesitar usar junto con la memoria compartida).

La memoria compartida también le brinda más control sobre el uso de recursos y la creación de búferes; dentro de los límites permitidos por el sistema operativo, es usted quien decide la cantidad de memoria que debe asignar y cómo usarla. Con tuberías, el sistema operativo controla las cosas automáticamente, por lo que, una vez más, pierdes algo de flexibilidad pero te liberas de mucho trabajo.

Resumen de los puntos más importantes: tuberías para la comunicación uno a uno, menos codificación y dejar que el sistema operativo maneje las cosas, memoria compartida para muchos, más control manual sobre las cosas, pero a costa de más trabajo y una depuración más difícil.