【发布时间】:2011-03-30 21:50:44
【问题描述】:
Linux中的消息队列和管道有什么区别?
【问题讨论】:
Linux中的消息队列和管道有什么区别?
【问题讨论】:
在我的脑海中,假设您谈论的是 posix 消息队列(不是 SysV 的):
select()、poll()、epoll()和mqd_t上的朋友。【讨论】:
它们是非常不同的东西,真的。
最大的实际区别是管道没有“消息”的概念,它只是到write() 字节和read() 字节的管道。接收端必须有办法知道哪些数据构成您程序中的“消息”,并且您必须自己实现。此外,还定义了字节的顺序:字节将按照您放入它们的顺序出现。而且,一般来说,它有一个输入和一个输出。
消息队列用于传输具有类型和大小的“消息”。所以接收端可以只等待一个特定类型的“消息”,你不必担心这是否完整。多个进程可以向同一个队列发送和接收。
请参阅man mq_overview 和/或man svipc 了解更多信息。
【讨论】: