Linux中消息队列和管道之间的区别是什么?管道vs信息队列
Q
管道vs信息队列
14
A
回答
18
了我的头顶部,假设你谈POSIX消息队列(不SysV的那些):
- 管不得有大小限制,消息队列。
- 管道可以集成在使用文件描述符的系统中,消息队列有自己的一套功能,尽管linux支持
select()
,poll()
,epoll()
和mqd_t
上的朋友。 - 管道一旦关闭,需要双方进行一定程度的合作才能重新建立,消息队列可以关闭并在任何一方重新打开,而不需要另一端的合作。
- 管道是扁平的,很像流,强加一个消息结构,你将不得不在双方都实现一个协议,消息队列已经是消息导向了,不必在意第五条消息队列。
9
他们是非常不同的东西,真的。
最大的实际区别是管道没有“消息”的概念,它只是一个从write()
字节到read()
字节的管道。接收端必须能够知道程序中哪些数据构成了“消息”,并且您必须自己实现这一点。此外,还定义了字节顺序:字节将按照您输入的顺序出现。一般而言,它具有一个输入和一个输出。
消息队列用于传输具有类型和大小的“消息”。因此,接收端可以等待一个特定类型的“消息”,并且您不必担心这是否完成。多个进程可能发送到同一队列并从中接收。
参见man mq_overview
和/或man svipc
了解更多信息。
+1
即使在队列中,您也可以发送任何结构作为消息,因此在这种情况下,接收端也必须知道“在您的程序中哪些数据构成了消息。 – 2012-06-25 18:01:03
相关问题
- 1. Hazelcast队列信息
- 2. Laravel的Redis队列信息
- 3. 使用MSMQ死信队列或管理队列处理未发送的消息?
- 4. 等待队列VS信号量在linux
- 5. 管道和消息队列之间有什么区别?
- 6. Python多处理 - 管vs队列
- 7. 消息队列VS线程池
- 8. python subprocess.Popen()vs消息队列(芹菜)
- 9. 队列信道初始化为SubscribableChannel
- 10. 队列元素GStreamer的管道
- 11. 避免“管道破损”信息
- 12. 命名管道详细信息
- 13. Google App Engine通道API消息队列
- 14. 管道通信
- 15. 用云信息创建FIFO SQS队列
- 16. ActiveMQ有关删除队列的信息
- 17. 阻塞队列 - 需要更多信息
- 18. MSMQ死信队列消息恢复
- 19. 异步队列返回信息
- 20. C++ deque vs队列vs栈
- 21. 普通队列vs SEDA队列
- 22. 优先级队列VS队列
- 23. jms队列vs内存java队列
- 24. Redis队列vs MSMQ
- 25. Microsoft消息队列vs DDS vs数据库vs WCF vs纯文本文件?
- 26. VS团队服务触发建立与提交信息
- 27. Python的多处理队列可靠性,队列VS SimpleQueue VS JoinableQueue
- 28. PHP fwrite vs.输出管道
- 29. ESB VS雅虎管道
- 30. Golang io.Pipe vs node.js管道
好的,非常感谢... 但是我有一个小小的怀疑“管道一旦关闭需要双方支持某种支持”,你的意思是强调管道不是内核持久化和消息队列是.. 。 究竟需要什么样的套管来重新封闭管道一旦关闭? – mint9 2010-08-17 11:15:37
@ mint9:一般来说,您需要抓住SIGPIPE,优雅地处理它,然后'重新打开'管道。我想你可以fork()你的进程(双方),重复你的标准输入/输出,让父母继续运行(他们充当守卫),然后当你关闭你让你的孩子死(两边),并重做叉/ dup/pipe程序。 – hroptatyr 2010-08-17 11:39:58
okie,我明白了。 谢谢 – mint9 2010-08-18 06:49:44