【问题标题】:What are all the differences between pipes and message queues?管道和消息队列之间有什么区别?
【发布时间】:2011-01-29 01:32:28
【问题描述】:

管道和消息队列有什么区别?

请从 vxworks 和 unix 的角度解释一下。

我认为管道是单向的,但消息队列不是。

但是管道内部不使用消息队列,那么为什么管道是单向的而消息队列不是呢?

您还能想到哪些其他差异(从设计或使用或其他角度)?

【问题讨论】:

  • 我认为总的来说它们是一样的。消息队列倾向于确保数据到达接收者。所以他们可以持久化数据,直到接收者可用,但我想这不是强制性的,并且依赖于实现,就像单/双向或持久/单消息管道等......管道用于发送字符串块和二进制数据,而队列用于发送消息,但同样,这可能取决于实现。如果我们谈论消息传递,人们喜欢重新发明轮子。有些术语有超过 5 个不同的名称...
  • 也检查一下quora.com/…

标签: unix ipc message-queue pipe vxworks


【解决方案1】:

消息队列是:

  • 单向
  • 固定条目数
  • 每个条目都有一个最大大小
  • 创建时分配的所有队列内存(# 条目 * 条目大小)
  • 类似数据报的行为:读取条目会将其从队列中删除。如果您不读取全部数据,则其余数据将丢失。例如:发送一个 20 字节的消息,但接收方读取 10 个字节。剩余的 10 个字节丢失。
  • 任务只能使用 msqQReceive 挂起在单个队列上(有一些方法可以使用替代 API 进行更改)
  • 发送时,如果队列已满,您将挂起(并且您不执行 NO_WAIT)
  • 接收时,如果队列为空,则挂起(并且不做NO_WAIT)
  • 接收和发送支持超时

管道

  • 是消息队列之上的一层
  • 有最大数量的元素,每个元素都有最大尺寸
  • 不是流接口。数据报语义,只列出消息队列
  • 读取时,将挂起,直到有数据要读取
  • 写入时,将挂起,直到底层消息队列中有空间
  • 可以使用选择工具在多个管道上等待

这就是我现在能想到的。

【讨论】:

  • 任务处于挂起状态,这意味着它正在等待某些事情发生:在这种情况下,队列中包含某些内容(读取时)或有一个空槽(写入时)。
【解决方案2】:

“VxWorks 管道与 UNIX 管道有很大不同”,vxWorks 文档说,他们不是在开玩笑。 Here's the manpages.

似乎毫不夸张地说,Unix 管道和 vxWorks 管道之间的唯一相似之处在于它们是 IPC 的一种形式。功能不同,API 不同,实现肯定也大不相同。

【讨论】:

    【解决方案3】:

    我也在IPC in UNIX 中发现了这种差异。它指出它们之间的区别在于消息队列和管道是第一个存储/检索数据包中的信息。而管道则逐个字符地进行。

    消息队列:

    消息队列:类似于管道的匿名数据流,但存储 并检索数据包中的信息。

    管道

    管道:通过标准输入接口的双向数据流和 输出并逐字符读取

    我在这里也发现了这个问题:Pipe vs msg queue

    【讨论】:

      【解决方案4】:

      消息队列和管道的比较: - 一个消息队列可用于双向传递数据 - 消息不需要在先进先出的基础上阅读 但可以选择性地处理 来源:见http://www.cs.vsb.cz/grygarek/dosys/IPC.txt

      【讨论】:

        【解决方案5】:

        MQ 具有内核持久性,可以被多个进程打开。

        【讨论】:

        • Ken,我不确定你在说什么……在 vxWorks 的上下文中,管道可以由多个进程打开。我不确定内核持久性是什么意思。
        • 看起来vxWorks“管道”与几乎所有其他现代操作系统上的“管道”都大不相同。您可以假设我的回答适用于所有非 vxWorks 系统。 :-)
        • 内核持久性意味着只要内核持续存在,它就会持续存在,而不是文件系统持久性、进程持久性(至少在 Unix 上具有管道)等。
        猜你喜欢
        • 2015-10-23
        • 2018-08-04
        • 2013-11-05
        • 2011-12-09
        • 2014-08-12
        • 2018-11-15
        • 2014-12-21
        • 2013-05-29
        • 2014-05-07
        相关资源
        最近更新 更多