gpt4 book ai didi

unix - 管道和消息队列之间的所有区别是什么?

转载 作者:行者123 更新时间:2023-12-03 22:01:22 25 4
gpt4 key购买 nike

管道和消息队列之间的所有区别是什么?

请从 vxworks 和 unix 的角度进行解释。

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

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

您能想到的其他差异是什么(从设计或使用或其他角度来看)?

最佳答案

消息队列是:

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

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

  • 这就是我现在能想到的。

    关于unix - 管道和消息队列之间的所有区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470655/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com