IPC(InterProcess Communication)进程间通信方式

Windows平台下的IPC:http://blog.csdn.net/bjtbjt/article/details/7044266

File Mapping(文件映射)

Shared Memory(共享内存):实质上是文件映射的一种特殊情况

Anonymous Pipe(匿名管道):在有亲缘关系的进程间进行通信

Named Pipe(命名管道):可以在不相关进程之间和不同计算机之间使用

Mailslots(邮件槽):提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器,建立多个邮件槽可以实现进程间双向通信

Clipped Board(剪贴板):实质上是Win32 API中一族用来传输数据的函数和消息,不能在网络上使用

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

OLE(对象连接于嵌入):一般用于管理复合文档,即由多种数据格式组成的文档

DDL(动态连接库):DDL中的全局数据可以被调用DDL的所有进程共享,但是并不提倡这种方法,使用带有访问权限控制的共享内存方法更好

RPC(远程过程调用):可以在网络上使用RPC进行进程通信,就像函数调用那样简单

Socket(套接字):越来越多的程序在使用这个方式,主要优点就是跨平台,且支持功能很全面

WM_COPYDATA(message窗口消息机制):进程间使用SendMessage来发送消息让对方来处理,它在底层上实际上是通过文件映射来实现的,并且只能用于Windows平台的单机环境下,通信进程必须都有窗口

Event(事件机制):是一个内核对象,可以用于不同进程间的同步控制

信号量:对系统共享资源的访问控制

Win32 API提供了如此多的进程间通信方案,在选择的时候一般需要考虑如下因素:

1. 应用程序是在网络环境下还是在单机环境下

2. 是否需要跨平台

3. 是否具有windows窗口

4. 通信进程是否相关(如:是否具有亲缘关系)

Linux平台下的IPC:http://blog.sina.com.cn/s/blog_715342470100s558.html

http://www.cnblogs.com/mydomain/archive/2010/09/23/1833369.html

http://blog.sina.com.cn/s/blog_6002b97001013wec.html

管道和命名管道:和Windows下的匿名管道作用相似,但是它是半双工的

信号:是在软件层次上对中断机制的一种模拟,在原理上一个进程收到一个信号与处理器收到一个中断请求可以说是一样的,信号事件可以有两个来源:硬件来源和软件来源(如kill,raise,alarm以及一些非法运算操作等)

信号灯(信号量):它主要提供对进程间共享资源的访问控制,主要是进行同步控制

消息队列:随内核持续,只有在内核重启或者显式删除一个消息队列时,该消息队列才会被真正删除。它就是一个消息的链表,克服了信号传递信息少,管道只能承载无格式字节流及缓冲区大小受限的缺点

共享内存:是最有用的也是最快的IPC方式,共享内存的意思就是同一块物理内存被映射到不同进程的进程地址空间,不同进程可以即时看到共享内存中的数据更新,由于共享所以在访问的时候需要进行某种互斥和同步的控制

套接字:跨平台,使用很广泛

Windows和Linux平台下IPC机制的共同点:

1. 都有管道和命名管道

2. Linux的信号和Windows的消息或事件机制

3. 共享内存

4. 套接字

总结

1. 消息队列时消息的链表,克服了信号承载信息量少,管道只能承载无格式字节流及缓冲区大小受限的缺点

2. 信号量主要作为进程间以及同一进程的不同线程之间的同步手段

3. 管道、剪贴板、共享内存都是基于共享内存的方式;而消息、消息队列、事件和套接字都是基于发消息的机制,只是看是在同一台机器上发送还是在网络中发送消息(套接字是在网络中发送消息)

4. RCP、COM、OLE、DDE主要是在客户端和服务器端生成一个统一的接口,这几个手段相当于网络上的协议,在同一层通信的协议不管下一层,好像是这两层直接建立了联系。

5. 剪切板、匿名管道只能实现统一机器上的两个进程间的通信;信号量、消息、消息队列和共享内存只能在同一机器上的多个进程间通信;命名管道、邮件槽和套接字不仅可以实现统一机器上的两个进程的通信,还可以实现跨网络的进程间通信(各个具体应用之间,一般每个应用都会对应一个端口号和网络进行通信);此外,邮件槽和套接字可以实现一对多的通信,而命名管道只能是点对点的单一通信,邮件槽的缺点就是数据量较小。

在跨网络的通信中,套接字无疑是最优秀的通信方式

你可能感兴趣的:(linux,windows,网络,服务器,平台,跨平台)