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