2010-03-18 18 views
7

¿Cuáles son todas las diferencias entre las tuberías y las colas de mensajes?¿Cuáles son todas las diferencias entre las tuberías y las colas de mensajes?

Explique ambos desde vxworks & perspectivas de unix.

Creo que las tuberías son unidireccionales pero las colas de mensajes no lo son.

Pero no utiliza internamente las colas de mensajes, ¿por qué las tuberías son unidireccionales pero las colas de mensajes no?

¿Cuáles son las otras diferencias que se le ocurren (desde el diseño o el uso u otras perspectivas)?

+0

Creo que, en general, son la misma cosa. Las colas de mensajes tienden a garantizar que los datos lleguen al destinatario. Entonces pueden persistir los datos hasta que el destinatario esté disponible, pero supongo que esto no es obligatorio y depende de la implementación, al igual que uni/bidireccional, o un tubo persistente/de un solo mensaje, etc ... Las tuberías se utilizan para enviar fragmentos de cadenas y datos binarios, mientras que las colas se utilizan para enviar mensajes, pero de nuevo, esto puede ser dependiente de la implementación. A la gente le gusta reinventar la rueda si hablamos de mensajes. Algunos de los términos tienen más de 5 nombres diferentes ... – inf3rno

Respuesta

-1

MQ tienen persistencia del kernel, y se pueden abrir mediante procesos múltiples.

+0

Ken, no estoy seguro de lo que dices ... En el contexto de vxWorks, las tuberías se pueden abrir mediante múltiples procesos. No estoy seguro de qué significa la persistencia del kernel. – Benoit

+0

Parece que las "tuberías" de vxWorks son muy diferentes de las "tuberías" en casi todos los demás sistemas operativos modernos. Puede suponer que mi respuesta se aplica a todos los sistemas que no son vxWorks. :-) – Ken

+0

La persistencia del kernel significa que persiste mientras el kernel lo haga, a diferencia de la persistencia del sistema de archivos, la persistencia del proceso (que las tuberías tienen, al menos en Unix), etc. – Ken

11

colas de mensajes son:

  • UNIDIRECCIONALES
  • Número fijo de entradas
  • Cada entrada tiene un tamaño máximo
  • Toda la memoria de espera (# entradas * tamaño de la entrada) asignado a la creación
  • Comportamiento similar a un diagrama de datos: al leer una entrada, se elimina de la cola. Si no lee los datos completos, el resto se pierde. Por ejemplo: envíe un mensaje de 20 bytes, pero el receptor lee 10 bytes. Los 10 bytes restantes se pierden.
  • tarea sólo puede Pend en una sola cola usando msqQReceive (hay maneras de cambiar eso con API alternativa)
  • Al enviar, usted Pend si la cola está llena (y no lo hace NO_WAIT)
  • cuando se recibe, se le Pend si la cola está vacía (y no lo hace NO_WAIT)
  • tiempos de espera son compatibles con recibir y enviar

Tubos

  • Son un mensaje de capa sobre las colas < --- ¡Unidireccional!
  • Tienen un número máximo de elementos y cada elemento tiene un tamaño máximo
  • NO ES UNA INTERFAZ DE TRANSMISIÓN. la semántica de datagramas, solo mensaje de lista Colas
  • En lectura, Will PEND hasta que haya datos para leer
  • En escritura, Will PEND hasta que haya espacio en la cola de mensajes subyacente
  • Puede utilizar facilidad de selección para esperar en múltiples tuberías

Eso es lo que se me ocurre en este momento.

+0

¿Qué es 'pend'? –

+2

La tarea está en estado pendiente, lo que significa que está esperando que ocurra algo: en este caso, la cola tiene algo en ella (cuando lee) o tiene un espacio vacío (al escribir). – Benoit

1

"Las tuberías VxWorks difieren significativamente de las tuberías UNIX", dice la documentación de vxWorks, y no es broma. Here's the manpages.

Parece que no sería exagerado decir que la única similitud entre las tuberías Unix y las tuberías vxWorks es que son una forma de IPC.Las características son diferentes, las API son diferentes y las implementaciones seguramente son muy diferentes.

0

También encontré esta diferencia en IPC in UNIX. Establece que la diferencia entre ellos es que Message Queues and Pipe es que el primero almacena/recupera información en paquetes. Mientras que las tuberías lo hacen carácter por carácter.

Msg cola:

de cola de mensajes: An datos anónimos corriente similar a la de la tubería, pero las tiendas y recupera la información en paquetes.

Pipe

Pipe: Un flujo de datos bidireccional interfaz a través de la entrada estándar y de salida y se lee carácter por carácter

También encontré esta pregunta aquí: Pipe vs msg queue

0

Comparación de colas de mensajes y conductos: - UNA cola de mensajes se puede usar para pasar datos en ambos directos iones - el mensaje no es necesario leer el primero en entrar, primero en salir pero se pueden procesar de forma selectiva en lugar fuente: ver http://www.cs.vsb.cz/grygarek/dosys/IPC.txt

Cuestiones relacionadas