管道和消息队列的区别


Unix 管道

Unix 管道用于进程间通信。顾名思义,管道提供了一种单向的信息流。数据从一端流向另一端。

消息队列

消息队列允许发送方进程与其他进程共享消息。消息队列作为消息的链接列表实现,并存储在内核中。每个消息都有一个唯一的消息队列标识符。内核会记录系统中存在的消息队列。

以下是 Unix 管道和消息队列之间的一些重要区别。

序号关键点管道消息队列
1概念管道是 Unix IPC 形式,用于提供单向的信息流。消息队列是系统 VIPC 形式,用于存储消息列表。
2创建可以使用 pipe() 函数创建管道,该函数返回两个文件描述符,一个用于读取,另一个用于写入。可以使用 msgget() 函数创建消息队列,该函数返回队列标识符。
3方向管道是单向的。消息队列是双向的。
4数据获取数据可以以 FIFO(先进先出)的方式获取。数据可以以任何顺序获取。
5优先级管道中不存在优先级。消息可以通过将优先级编号附加到消息类型来具有优先级。
6接收者为了使管道正常工作,发送方和接收方进程应该存在,以等待写入和读取管道中的消息。在消息队列中,写入进程可以写入消息并退出。读取进程稍后可以读取消息。
7持久性如果系统中不存在关联的接收方/发送方进程,则管道将从系统中删除。消息队列在系统中保持活动状态,直到被某个进程显式删除。
8消息大小管道消息大小最多可达 4096 字节。消息队列消息大小最多可达 8192 字节。


更新于: 2020-04-16

3K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.