pipe道vs味精队列

消息队列和Linux中的pipe道有什么区别?

Solutions Collecting From Web of "pipe道vs味精队列"

关闭我的头顶上,假设你谈论posix消息队列(而不是SysV的):

  • 管道的大小不限,消息队列是。
  • 虽然Linux支持mqd_t上的select()poll()epoll()和朋友,但管道可以集成在使用文件描述符的系统中,消息队列有自己的一套功能。
  • 管道一旦关闭,需要双方进行一定程度的合作才能重新建立,消息队列可以在另一端封闭并重新开放,而不需要另一端的合并。
  • 管道是扁平的,就像一个流,强加一个消息结构,你将不得不在双方都实现一个协议,消息队列已经是消息导向,不必考虑队列中的第五条消息。

他们是非常不同的东西,真的。

最大的实际区别是一个管道没有“消息”的概念,它只是一个将字节write()read()字节的管道。 接收端必须有一种方法来知道在你的程序中哪些数据构成了“消息”,你必须自己实现这一点。 此外,还定义了字节的顺序:字节将按照您输入的顺序输出。一般来说,它有一个输入和一个输出。

消息队列用于传输具有类型和大小的“消息”。 所以接收端可以等待一个特定类型的“消息”,如果这个消息是完整的,你不必担心。 多个进程可能发送到同一队列并从中接收。

请参阅man mq_overview和/或man svipc以获取更多信息。