进程间通信

举报
Jet Ding 发表于 2020/09/29 11:04:43 2020/09/29
【摘要】 在计算机科学中,进程间通信(IPC)特指操作系统提供的允许进程管理共享数据的机制。

在计算机科学中,进程间通信(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, 通过套接字写的数据需要格式化以保留消息边界)或更少见的面向消息的方式(UDPSCTP)          

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系统、WindowsAmigaOS 2.0+

1.9    共享内存

多个进程可以访问同一个内存块,这就为进程之间的通信创造了一个共享缓冲区。               

1.9.1    适用于

所有POSIX系统、Windows

1.10      信息传递

允许多个程序使用消息队列或者非OS管理的通道进行通信。常用于并发模型中。                 

1.10.1 适用于

用于RPCRMIMPI范式、Java RMICORBADDSMSMQMailSlotsQNX等。

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.         EneaLINX for Linux(开源)和OSE下的各种DSP和通用处理器。

4.         马赫内核的马赫端口

5.         微软的ActiveX、组件对象模型(COM)、微软事务服务器(COM+)、分布式组件对象模型(DCOM)、动态数据交换(DDE)、对象链接和嵌入(OLE)、匿名管道、命名管道、本地过程调用、MailSlots、消息循环、MSRPC.NET RemotingWindows Communication Foundation(WCF)

6.         NovellSPX

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200