Linux环境编制之IPC进程间通信(一):IPC概述
来源:互联网 发布:淘宝换类目影响权重不 编辑:程序博客网 时间:2024/05/22 03:36
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。
IPC是进程间通信的简称,它是运行在某个操作系统上的不同进程间各种消息传递的方式。IPC的方式有如下几种:管道、FIFO(也成有名管道)、消息队列、套接字、远程过程调用(RPC)。其中管道只能在具有共同祖先(指父子进程关系)的进程间使用,但FIFO(有名管道)解决了该问题;消息队列可用在同一主机上有亲缘关系和无亲缘关系的进程间之间;远程过程调用是一个系统(客户主机)上某个程序调用另一个系统(服务器主机)上某个函数的一种方法,是作为显示网络编程的一种替换方法开发的,既然客户和服务器之间通常传递一些信息(被调用函数的参数与返回值),而RPC可用在同一主机上的客户和服务器之间,因此可认为RPC是另一种形式的消息传递。
图 进程间共享信息的三种方式
左边的两个进程共享存留于文件系统中某个文件上某些信息;中间的两个进程共享驻留于内核中的某些信息;右边的两个进程有一个双方都能访问的共享内存区。图中虽然只画了两个进程,但实现中可以是任意数目的进程。一个给定进程内的所有线程共享同样的全局变量(也就是说共享内存区的概念对线程来说是内在的)。然而我们必须关注的是各个线程间对全局数据的同步访问。因此,可以不把同步当作一种IPC形式,而是伴随许多IPC形式使用的,以控制对某些共享数据的访问。
由上面的三种共享信息的三种方式可以看出IPC的三种持续性,即一个IPC对象一直存在多长时间。
图 IPC对象的持续性
IPC类型
持续性
管道
FIFO
随进程
随进程
Posix读写锁
Posix互斥锁
Posix条件变量
fcntl记录上锁
随进程
随进程
随进程
随进程
Posix消息队列
Posix有名信号量
Posix基于内存的信号量
Posix共享内存区
随内核
随内核
随进程
随内核
System V消息队列
System V信号量
System共享内存区
随内核
随内核
随内核
TCP套接字
UDP套接字
Unix域套接字
随进程
随进程
随进程
图 各种类型IPC对象的持续性
上图中没有任何类型的IPC具备随文件系统的持续性,Posix IPC的三种类型可能具有该持续性,但取决于实现。其实,向一个文件写入数据提供了随文件系统的持续性,但这不作为一种IPC形式使用。多数形式的IPC并没有在系统重新自举后继续存在的必要,因为进程在自举后就不会存在了。而且,对于一种给定形式的IPC,要求具备随文件系统的持续性可能会使其性能降级,而IPC的一个基本的设计目标时高性能。
参考:
- Linux环境编制之IPC进程间通信(一):IPC概述
- Linux环境编程之IPC进程间通信(二):管道
- Linux环境编程之IPC进程间通信(三):FIFO
- 进程间通信(IPC)概述
- Linux进程间通信(IPC)之综述
- Linux进程IPC浅析[进程间通信概述与管道]
- Linux进程间通信(IPC)
- Linux 进程间【IPC】通信
- Linux 进程间通信(IPC)
- Linux进程间通信 IPC
- linux ipc 进程间通信
- Linux进程间通信 IPC
- linux进程间通信IPC
- linux进程间IPC通信
- 进程间通信之:IPC
- IPC(进程间通信)概述
- android ipc进程间通信(概述)
- linux 进程通信 IPC
- 计算机系统:关于整数在计算机中的表示
- TCP/IP详解 第六章摘抄 ICMP internet控制报文协议
- Vxworks 仿真时遇到如下问题
- VisionBib
- PICT工具-成对组合覆盖用例设计的使用与原理
- Linux环境编制之IPC进程间通信(一):IPC概述
- 批处理模拟一维数组
- 机器学习-Logistic回归python实现
- 关于Java设计之初的一些思考
- POJ 2365Rope
- /home下用户目录的.bash_profile和.login以及.profile
- hdu 4568 Hunter(最短路+记忆化搜索)
- 数据结构 栈和队列
- Linux常用命令(Ubuntu)