加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

要使程序强大,必须了解学习进程间通讯

发布时间:2022-11-06 14:31:43 所属栏目:Unix 来源:网络
导读: 什么是进程间通讯

进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够

什么是进程间通讯

unix socket 通信框架_unix进程通信_unix根据端口查看进程

进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,对于单个程序而言使用所有的IPC方法是不常见的。IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)等方式。

进程间通讯的目的

unix进程通信_unix socket 通信框架_unix根据端口查看进程

1、数据传输:把一个进程的数据传输给另一个进程。大小在一个字节到几兆字节。

2、共享数据:多个进程共同操作同一个数据,如果一方修改其它进程方立马刷新。

3、通知事件:一个进程通知一个进程发生了一个事件。

4、资源共享:多个进程之间共享同一的资源。

5、进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程)

Android 进程间通讯的方式

unix根据端口查看进程_unix进程通信_unix socket 通信框架

Android系统中应用程序之间不能共享内存,在android SDK中提供了4种用于跨进程通讯的方式。

1、Activity可以跨进程调用其他应用程序的Activity

2、Content Provider存在的目的向其他应用程序共享数据和允许其他应用程序对数据进行增、删、改操作

3、Broadcast可以向android系统中所有应用程序发送广播,而需要跨进程通讯的应用程序可以监听这些广播

4、Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务

python 进程间通信的方式

unix socket 通信框架_unix进程通信_unix根据端口查看进程

有两种主要的方式:Queue、Pipe;Python提供了一个函数multiprocessing.Pipe和一个类:multiprocessing.Queue。

Pipe即管道模式,调用Pipe()返回管道的两端的Connection,Python官方文档的描述:Returns a pair (conn1, conn2) of Connection objects representing the ends of a pipe.信息是只向一个方向流动。例如电视、广播,看电视的人只能看,电视台是能播送电视节目。

unix socket 通信框架_unix进程通信_unix根据端口查看进程

Queue官方文档也是基于pipe的实现。Queue的使用主要是一边put(),一边get().但是Queue可以是多个Process 进行put操作,也可以是多个Process进行get()操作。

Linux进程间通信的方式

管道是Linux支持的最初Unix IPC形式之一,管道可用于输入输出重定向unix进程通信,它将一个命令的输出直接定向到另一个命令的输入。比如,当在某个shell程序键入who│wc -l后,相应shell程序将创建who以及wc两个进程和这两个进程间的管道

有名管道FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise,alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作

system V提供的进程间通信的三种方式(1)消息队列 (2)信号量 (3)共享内存

套接字(unix域协议)socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。

Windows进程间通信的方式

unix socket 通信框架_unix根据端口查看进程_unix进程通信

unix进程通信_unix根据端口查看进程_unix socket 通信框架

多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(API接口) 提供了大量支持应用程序间数据共享和交换的机制。通讯的方法有:

文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待

共享内存,Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。

匿名管道(Anonymous Pipe)是 在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道。

unix socket 通信框架_unix进程通信_unix根据端口查看进程

命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。

邮件槽(Mailslots)提 供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给 邮件槽服务器进程发送消息。

剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个 中介, Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。

动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。

应用程序利用对象连接与嵌入(OLE)技术管理复合文档(由多种数据格式组成的文档),OLE提供使某应用程序更容易调用其它应用程序进行数据编辑的服 务。

Win32动态连接库(DLL)中的全局数据可以被调用DLL的所有进程共享,这就又给进程间通信开辟了一条新的途径,当然访问时要注意同步问题。

Win32 API提供的远程过程调用(RPC)使应用程序可以使用远程调用函数,这使在网络上用RPC进行进程通信就像函数调用那样简单。

unix根据端口查看进程_unix socket 通信框架_unix进程通信

Win32 API提供NetBios函数用于处理低级网络控制,这主要是为IBM NetBios系统编写与Windows的接口。

Windows Sockets规范是以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义的一套Windows下的网 络编程接口。除了Berkeley Socket原有的库函数以外 ,还扩展了一组针对Windows的函数,使程序员可以充分利用Windows的消息机制进行编程。

WM_COPYDATA它在底层实际上是通过文件映射来实现的。 它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!