Linux中的消息队列和管道有什么区别?
答案 0 :(得分:20)
离开我的头顶并假设你谈论posix消息队列(而不是SysV消息队列):
select()
,poll()
,epoll()
以及{{1}上的朋友}。答案 1 :(得分:11)
他们是非常不同的东西,真的。
最大的实际区别是管道没有“消息”的概念,它只是从write()
字节到read()
字节的管道。接收端必须能够知道哪些数据构成了程序中的“消息”,您必须自己实现。此外,字节的顺序是定义的:字节将按照你输入的顺序出现。而且,一般来说,它有一个输入和一个输出。
消息队列用于传输具有类型和大小的“消息”。因此,接收端可以等待具有特定类型的一条“消息”,并且您不必担心这是否完整。有几个进程可以向同一队列发送和接收。
有关详细信息,请参阅man mq_overview
和/或man svipc
。