管道和消息队列的区别
Unix 管道
Unix 管道用于进程间通信。顾名思义,管道提供了一种单向的信息流。数据从一端流向另一端。
消息队列
消息队列允许发送方进程与其他进程共享消息。消息队列作为消息的链接列表实现,并存储在内核中。每个消息都有一个唯一的消息队列标识符。内核会记录系统中存在的消息队列。
以下是 Unix 管道和消息队列之间的一些重要区别。
| 序号 | 关键点 | 管道 | 消息队列 |
|---|---|---|---|
| 1 | 概念 | 管道是 Unix IPC 形式,用于提供单向的信息流。 | 消息队列是系统 VIPC 形式,用于存储消息列表。 |
| 2 | 创建 | 可以使用 pipe() 函数创建管道,该函数返回两个文件描述符,一个用于读取,另一个用于写入。 | 可以使用 msgget() 函数创建消息队列,该函数返回队列标识符。 |
| 3 | 方向 | 管道是单向的。 | 消息队列是双向的。 |
| 4 | 数据获取 | 数据可以以 FIFO(先进先出)的方式获取。 | 数据可以以任何顺序获取。 |
| 5 | 优先级 | 管道中不存在优先级。 | 消息可以通过将优先级编号附加到消息类型来具有优先级。 |
| 6 | 接收者 | 为了使管道正常工作,发送方和接收方进程应该存在,以等待写入和读取管道中的消息。 | 在消息队列中,写入进程可以写入消息并退出。读取进程稍后可以读取消息。 |
| 7 | 持久性 | 如果系统中不存在关联的接收方/发送方进程,则管道将从系统中删除。 | 消息队列在系统中保持活动状态,直到被某个进程显式删除。 |
| 8 | 消息大小 | 管道消息大小最多可达 4096 字节。 | 消息队列消息大小最多可达 8192 字节。 |
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP