GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuáles son las desventajas de las colas de mensajes de Linux?

Las funciones msgctl() , msgget() , msgrcv() y msgsnd() son las funciones de cola de mensajes 'System V IPC'. Funcionarán para ti, pero son bastante pesados. Están estandarizados por POSIX.

POSIX también proporciona un conjunto de funciones más moderno, mq_close() , mq_getattr() , mq_notify() , mq_open() , mq_receive() , mq_send() , mq_setattr() y mq_unlink() que podría ser mejor para ti (qué vergüenza de riquezas).

Sin embargo, deberá verificar cuál, si es que está instalado, en sus plataformas de destino de forma predeterminada. Especialmente en un sistema embebido, podría ser que tenga que configurarlos, o incluso instalarlos porque no están allí de forma predeterminada (y lo mismo podría ocurrir con la memoria compartida y los semáforos).

La principal ventaja de cualquiera de los conjuntos de funciones de mensajes es que están predepurados (probablemente) y, por lo tanto, ya tienen problemas de concurrencia resueltos, mientras que si lo va a hacer usted mismo con memoria compartida y semáforos, tiene mucho de trabajo por hacer para llegar al mismo nivel de funcionalidad.

Entonces, (re)utilízalo cuando puedas. Si es una opción, utilice uno de los dos sistemas de cola de mensajes en lugar de reinventar el suyo propio. Si finalmente descubre que hay un cuello de botella en el rendimiento o algo similar, entonces puede investigar y escribir sus propias alternativas, pero hasta entonces, ¡reutilice!


Las colas de mensajes del Sistema V (las que son manipuladas por las llamadas al sistema msg*) tienen muchas peculiaridades y trampas extrañas. Para código nuevo, recomiendo enfáticamente usar sockets de dominio UNIX.

Dicho esto, también recomendaría encarecidamente el paso de mensajes IPC sobre los esquemas de memoria compartida. La memoria compartida es mucho más fácil de equivocarse y tiende a fallar mucho más catastróficamente.


El paso de mensajes es excelente para pequeños fragmentos de datos y donde se debe mantener la inmutabilidad, ya que las colas de mensajes copian datos.

Un área de memoria compartida no copia datos al enviar/recibir y puede ser más eficiente para conjuntos de datos más grandes a cambio de un modelo de programación menos limpio.


Linux
  1. ¿Cuál es el nivel de ejecución actual del sistema Linux?

  2. Linux:¿cuáles son las diferentes formas de establecer permisos de archivos, etc. en Gnu/linux?

  3. Linux:¿cómo averiguar qué discos duros hay en el sistema?

  4. Linux:¿qué fuentes de entropía utiliza el kernel de Linux?

  5. Linux:¿cuáles son los valores de la propiedad de interrupciones del árbol de dispositivos?

¿Qué hace que la comunidad de Linux sea especial?

Linux vs Unix:¿Cuál es la diferencia?

¿Qué es el comando Watch de Linux + ejemplos?

¿Qué es el Shell en Linux?

¿Qué es el comando matar en Linux?

¿Qué son los inodos en Linux?