Saltar al contenido

diferencia entre la cola de mensajes y la memoria compartida?

Ezequiel, miembro de este staff, nos ha hecho el favor de crear este tutorial porque controla perfectamente el tema.

Solución:

Tanto la memoria compartida como las colas de mensajes se pueden utilizar para intercambiar información entre procesos. la diferencia esta en cómo son usados.

Memoria compartida es exactamente lo que pensarías: es un área de almacenamiento que puede ser leída y escrita por más de un proceso. No proporciona sincronización inherente; en otras palabras, depende del programador asegurarse de que un proceso no golpee los datos de otro. Pero es eficiente en términos de rendimiento: la lectura y la escritura son operaciones relativamente rápidas.

A cola de mensajes es una canalización unidireccional: un proceso escribe en la cola y otro lee los datos en el orden en que se escribieron hasta que se produce una condición de fin de datos. Cuando se crea la cola, se establecen el tamaño del mensaje (bytes por mensaje, generalmente bastante pequeño) y la longitud de la cola (número máximo de mensajes pendientes). El acceso es más lento que la memoria compartida porque cada operación de lectura/escritura suele ser un solo mensaje. Pero la cola garantiza que cada operación procesará un mensaje completo con éxito o fallará sin alterar la cola. Entonces, el escritor nunca puede fallar después de escribir solo un mensaje parcial, y el lector recuperará un mensaje completo o nada en absoluto.

La cola de mensajes tiene una sobrecarga de sincronización inherente, garantía de seguridad a costa del rendimiento. La memoria compartida no tiene salvaguardas: si dos subprocesos acceden a ella simultáneamente, es posible que entren en conflicto (escriban datos inconsistentes) a menos que usted mismo garantice la seguridad de los subprocesos. Esto puede ser insignificante en caso de que se permitan errores menores (por ejemplo, los datos van a la salida analógica y se acepta algo de ruido), por lo que puede omitir la verificación de errores por completo y seguir con un enfoque “suficientemente bueno” con una ganancia de rendimiento bastante alta. Además, la memoria compartida permite el intercambio de grandes piezas de datos y el almacenamiento común y persistente de datos comunes a varias aplicaciones que ahorran almacenamiento de memoria. Las colas de mensajes son para un rendimiento más bajo; por ejemplo, puede utilizarlas para proteger el acceso a la memoria compartida.

Al usar la memoria compartida teniendo en cuenta las posibles condiciones de carrera en las que un proceso escribe y otro lee, algo a tener en cuenta. Existe un riesgo asociado de usar el primero, suponga que dos procesos lo están usando, uno para escribir en él, el otro para leerlo, el que está escribiendo muere debido a una condición anormal, el proceso que lo está leyendo podría bloquearse o bloquearse.

La memoria compartida se puede considerar más rápida (baja sobrecarga, alto volumen de transferencia de datos) que las colas. Pero las colas, por otro lado, requieren una gran sobrecarga (la configuración para hacer que una cola sea permanente, etc.) con un bajo volumen de datos.

La responsabilidad con la memoria compartida es que debe implementar la sincronización para ser seguro para subprocesos. Echa un vistazo al excelente artículo de Beej sobre IPC.

Cuando se usan Colas, son seguras para subprocesos, y no solo eso, los mensajes se mantienen en la cola independientemente del resultado, suponga que dos procesos están usando la cola, cuando un proceso escribe en él (en forma de mensaje) y el otro proceso que está a punto de leer muere debido a un bloqueo o a una condición anormal en tal circunstancia, ese mensaje aún está en su lugar, el otro proceso, si se reinicia, puede leer de la cola, es decir, no se pierden datos .

Esa es la diferencia entre los dos.

Al final de todo puedes encontrar los comentarios de otros administradores, tú también tienes la opción de dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *