mqtt应用于进程间通信实例解析丨【拜托了,物联网!】
761
2022-05-29
在计算机科学中,进程间通信(IPC)特指操作系统提供的允许进程管理共享数据的机制。
通常情况下,应用程序可以使用IPC,分为客户端和服务器,客户端请求数据,服务器响应客户端请求,许多应用程序既是客户端又是服务器,常见于分布式计算中。
IPC对微内核和纳米内核的设计过程非常重要,减少了内核提供的功能数量。这些功能再通过IPC与服务器通信获得,与普通的单片内核相比,需要更多的通信量。
IPC接口一般包含了可变的分析框架结构。
这些过程保证了IPC模型所依赖的多向量协议之间的兼容性。
IPC 机制可以是同步的,也可以是异步的。同步基元可用于具有与异步 IPC 机制同步的行为。
网格计算系统,通过进程间网络通信,将多台个人计算机通过互联网连接起来。
1 通信方式
根据不同的软件要求,如性能、模块化以及网络带宽和延迟等系统情况,IPC可以采用不同的方法:
1.1 文件
存储在磁盘上的记录,或由文件服务器按需合成的记录,可由多个进程访问。
1.1.1 适用于
绝大多数操作系统。
1.2 通讯文件
20世纪60年代末的一种独特的IPC形式,与9号计划的9P协议最为相似。
1.2.1 适用于
达特茅斯分时系统。
1.3 信号
一个进程向另一个进程发送的系统消息,通常不用来传输数据,而是用来远程指挥另一个进程。
1.3.1 适用于
绝大多数操作系统。
1.4 Socket
通过网络接口发送的数据,可以发送到同一台计算机上的不同进程,也可以发送到网络上的另一台计算机。包括面向流的方式(TCP, 通过套接字写的数据需要格式化以保留消息边界)或更少见的面向消息的方式(UDP、SCTP)。
1.4.1 适用于
绝大多数操作系统。
1.5 Unix 域套接字
类似于互联网套接字,但所有的通信都在内核中进行。域套接字使用文件系统作为其地址空间。进程将域套接字引用为一个inode,多个进程可以用一个套接字进行通信。
1.5.1 适用于
所有POSIX操作系统和Windows 10。
1.6 消息队列
类似于套接字的数据流,但通常保留消息边界。通常由操作系统实现,它们允许多个进程在不直接连接的情况下对消息队列进行读写。
1.6.1 适用于
绝大多数操作系统。
1.7 匿名管道
使用标准输入和输出的单向数据通道。写端数据先由操作系统缓冲,随后读端从管道读取。通过使用两个 "方向"相反的管道,可以实现进程间的双向通信。
1.7.1 适用于
所有POSIX系统,Windows。
1.8 命名管道
像文件一样对待的管道。
进程不像匿名管道那样使用标准的输入和输出,而是像对待普通文件一样,向命名的管道读写。
1.8.1 适用于
所有POSIX系统、Windows、AmigaOS 2.0+。
1.9 共享内存
多个进程可以访问同一个内存块,这就为进程之间的通信创造了一个共享缓冲区。
1.9.1 适用于
所有POSIX系统、Windows。
1.10 信息传递
允许多个程序使用消息队列或者非OS管理的通道进行通信。常用于并发模型中。
1.10.1 适用于
用于RPC、RMI和MPI范式、Java RMI、CORBA、DDS、MSMQ、MailSlots、QNX等。
1.11 内存映射文件
一个映射到RAM的文件,可以通过直接改变内存地址来修改。
1.11.1 适用于
所有POSIX系统、Windows。
2 应用
2.1 远程程序调用接口
1. Java's Remote Method Invocation (RMI)
2. ONC RPC
3. XML-RPC or SOAP
4. JSON-RPC
5. Message Bus (Mbus) (specified in RFC 3259)
6. .NET Remoting
7. gRPC
2.2 平台通信栈
以下是利用IPC机制的消息传递和信息系统:
1. KDE的桌面通信协议(DCOP)--已被D-Bus废弃。
2. D-Bus
3. OpenWrt采用了ubus微总线架构。
4. MCAPI多核通信API
5. SIMPL Linux同步进程间消息传递项目(SIMPL)
6. 9P(9号计划文件系统协议)
7. 分布式计算环境(DCE)
8. Thrift
9. ZeroC的互联网通信引擎(ICE)
10. 0MQ
11. Enduro/X中间件
12. YAMI4
2.3 操作系统通信栈
1. Linux透明进程间通信(TIPC)
2. 苹果电脑公司的苹果事件,以前称为应用间通信(IAC)。
3. Enea的LINX for Linux(开源)和OSE下的各种DSP和通用处理器。
4. 马赫内核的马赫端口
5. 微软的ActiveX、组件对象模型(COM)、微软事务服务器(COM+)、分布式组件对象模型(DCOM)、动态数据交换(DDE)、对象链接和嵌入(OLE)、匿名管道、命名管道、本地过程调用、MailSlots、消息循环、MSRPC、.NET Remoting和Windows Communication Foundation(WCF)。
6. Novell的SPX
7. POSIX mmap、消息队列、semaphores和共享内存。
8. RISC操作系统的信息
9. 索拉里斯门业
10. 系统五的消息队列、信号灯和共享内存。
11. OpenBinder 打开文件夹
12. QNX 的 PPS(持续发布/订阅)服务
2.4 分布式对象模型
以下是使用IPC的平台或编程语言专用API:
1. 仅适用于Linux下的C++的Libt2n,处理复杂的对象和异常。
2. PHP的会话
3. 分布式Ruby
4. 通用对象请求代理架构(CORBA)
3 参考
https://en.wikipedia.org/wiki/Communicating_sequential_processes
https://en.wikipedia.org/wiki/Inter-process_communication
https://www.geeksforgeeks.org/inter-process-communication-ipc/
https://www.guru99.com/inter-process-communication-ipc.html
云计算
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。