进程间通信

网友投稿 715 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小时内删除侵权内容。

上一篇:华为云GaussDB(for Redis)揭秘第15期:为什么需要强一致
下一篇:华为人:怎么给博士军团当好“博导”?
相关文章