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