IPC - 进程间通讯
由于不同的进程运行在各自不同的内存空间中.一方对于变量的修改另一方是无法感知的.因此.进程之间的信息传递不可能通过变量或其它数据结构直接进行,只能通过进程间通信来完成。
示例
- 使用进程间通信的两个应用可以被分类为客户端和服务器(见主从式架构),客户端进程请求数据,服务端回复客户端的数据请求。
- 有一些应用本身既是服务器又是客户端,这在分布式计算中,时常可以见到。这些进程可以运行在同一计算机上或网络连接的不同计算机上。
优缺点
为什么要使用进程间通讯?
- 信息共享:Web服务器,通过网页浏览器使用进程间通信来共享web文件(网页等)和多媒体;
- 加速:维基百科使用通过进程间通信进行交流的多服务器来满足用户的请求;
- 模块化;
- 私有权分离.
与直接共享内存地址空间的多线程编程相比,IPC(进程间通讯)的缺点:
- 采用了某种形式的内核开销,降低了性能;
- 几乎大部分IPC都不是程序设计的自然扩展,往往戏剧性增加了程序复杂度。
分类
根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:控制信息的通信和大批数据信息的通信.前者称为低级通信,后者称为高级通信。
- 低级通信主要用于进程之间的同步、互斥、终止、挂起等等控制信息的传递。
- 传送信息量小,效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。
- 编程复杂,用户直接实现通信的细节,容易出错。
- 高级通信主要用于进程间数据块的交换和共享 常见的高级通信有管道(PIPE)、消息队列(MESSAGE)、共享内存(SHARED MEM0RY)等。
- 提高信号通信的效率,传递大量数据,减轻程序编制的复杂度。
具体实现
用于进程间通讯(IPC)的四种不同技术:
- 消息传递( 管道, FIFO, posix, system v, 消息队列 )
- 同步 (互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯)
- 共享内存区 (匿名共享内存区,有名Posix共享内存区,有名System V共享内存区)
- 过程调用 (Solaris门,Sun RPC)