当前位置: 首页 > 编程笔记 >

管道和消息队列之间的区别

姚智
2023-03-14
本文向大家介绍管道和消息队列之间的区别,包括了管道和消息队列之间的区别的使用技巧和注意事项,需要的朋友参考一下

Unix管道

Unix Pipes用于进程间通信。顾名思义,管道可提供单向信息流。数据从一端流向另一端。

消息队列

消息队列允许发送方进程将消息共享到另一个进程。消息队列被实现为消息的链接列表,并存储在内核中。每个消息都有一个唯一的消息队列标识符。内核会记录系统中存在的消息队列。

以下是Unix管道和消息队列之间的一些重要区别。

序号 消息队列
1 概念 管道是Unix IPC形式,用于在一个方向上提供信息流。 Message Queue是一个系统VIPC表单,用于存储消息列表。
2 创建 可以使用pipe()函数创建管道,该函数返回两个文件描述符,一个用于读取,另一个用于写入。 使用msgget()返回队列标识符的函数创建消息队列。
3 方向 管道是单向的。 消息队列是双向的。
4 资料撷取 数据可以先进先出的方式在FIFO中获取。 数据可以以任何顺序获取。
5 优先事项 管道中没有优先级。 通过在消息类型上附加优先级编号,可以使消息具有优先级。
6 接收者 为了使管道正常运行,应该存在发送方和接收方进程,以等待在管道中写入和读取消息。 在消息队列中,编写器进程可以编写消息并退出。阅读器进程可以稍后阅读消息。
7 坚持不懈 如果没有链接的接收器/发送器进程,则将管道从系统中删除。 消息队列在系统中保持活动状态,直到被某个进程显式删除为止。
8 讯息大小 管道消息的大小最大为4096字节 消息队列消息大小最多可以为8192字节。


 类似资料:
  • 可靠消费 Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理 RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费 可靠发布 Reids:不提供,需自行实现 Redis的消息队列,如果在从队列pop出去的时候,worker处理失败的话,数据不会回到队列中,需要从业务中手动把失败的处理数据p

  • 我刚才看到了三个方法的文档,当我们在工作线程中工作时,它们可以用来在UI线程中执行一段代码。方法有: > public final void runOnUIThread(Runnable action)-在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列中 public boolean post(Runnable act

  • 我希望能够在Rabbit中移动队列之间的消息(手动)。 例如: 我对rabbitmq和amqp还是个新手,但一直找不到关于如何做到这一点的文档(如果可能的话)。 多谢了。

  • 问题内容: 我对SOAP消息和WSDL如何组合在一起感到困惑?我已经开始研究SOAP消息,例如: 是否所有SOAP消息都是WSDL?SOAP是接受其自己的“ SOAP消息”或“ WSDL”的协议吗?如果它们不同,那么我什么时候应该使用SOAP消息,什么时候应该使用WSDL? 关于此的一些说明将是很棒的。 问题答案: 每个请求都会发送一个SOAP文档。假设我们是一家书店,并且拥有一台远程服务器,我们

  • 我对SOAP消息和WSDL如何结合感到困惑?我已经开始研究SOAP消息,例如: 所有SOAP消息都是WSDL的吗?SOAP是接受自己的“SOAP消息”还是“WSDL”的协议?如果它们不同,那么什么时候应该使用SOAP消息,什么时候应该使用WSDL消息? 关于这一点的一些澄清将是非常棒的。

  • 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并且只完成了一部分,如果它突然挂掉了,会发生什么情况? RabbitMQ一旦向消费者传递了一条消息,就会立即将该消息标记为删除。在这种情况下突然有个消费者挂掉了,将会丢失正在处理的信息,以及后续应该发送给该消费者的信息,因为该消费者无法接收到 为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制 消息应答机制指