管道和消息队列的区别

管道:Unix系统使用管道,建立进程间通信。管道提供单向数据流。使用 pipe() 函数创建管道。

语法:

#include int pipe(int fd);

pipe () 函数返回两个文件描述符,fd[O]fd[1]fd[0] 为读取而打开,fd[1] 为写入管道而打开。数据从管道的一端流向另一端。管道函数在成功时返回“0”或在错误时返回 -1。

消息队列 :消息队列,允许一个或多个进程写入消息以供其他进程读取。消息队列被实现为消息的链表,并存储在内核中。每个消息队列都由一个消息队列标识符标识。内核跟踪系统中创建的所有消息队列。

管道和消息队列的区别:

编号 管道消息队列
1 管道是 Unix IPC 的一种形式,提供单向数据流。 消息队列是系统 VIPC 的一种形式,它存储消息的链表
2 使用 pipe() 函数创建管道,返回两个文件描述符,一个用于读取,另一个用于写入。 使用 msgget() 函数创建消息队列会返回一个消息队列标识符。
3 管道和 FIFO 是单向的,即数据只能沿一个方向流动。 消息队列是双向的,即数据可以双向流动。
4 使用管道和 FIFO,必须按先进先出的顺序获取数据。 使用消息队列,可以按照与消息类型关联的值一致的任何顺序读取消息。
5 不能给消息分配优先级。 通过将优先级与类型或类型范围相关联,可以将优先级分配给消息。
6 对于管道和 FIFO,必须有一些进程等待消息通过管道和 FIFO 写入,即必须同时存在读取进程和写入进程。 使用消息队列,进程可以将消息写入队列然后退出,以便稍后其他进程可以读取消息。
7 当最后一个引用它的进程终止时,管道从系统中完全删除。 消息队列及其内容在进程终止时保留在系统中,直到它们被调用 mcgregor magento 的某个进程专门读取或删除,通过执行 ipcrm(1) 命令或通过重新启动系统。
8 FIFO的一个管道可以写入的最大字节数为4096字节。 可写入消息队列的最大消息大小为 8192 字节。
9 使用命名管道的一个主要优点是,它们提供了一种有用的方式,可以将单行请求发送到运行消息处理程序的 OpenEdge 后台会话,从而提高性能。 消息队列支持异步通信,这意味着产生和使用消息的端点与队列交互,而不是彼此交互。
10 多个用户可以通过同一个命名管道发送请求,并且每个请求在收到时从管道中删除。 提高可靠性。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/266924.html

(0)
上一篇 2022年6月12日
下一篇 2022年6月12日

相关推荐

发表回复

登录后才能评论