1.进程与进程通信。
进程是装入内存并准备执行的程序。每个进程都有私有的虚拟地址空间,由代码、数据、系统资源(如文件等)组成。
IPC(interprocess communication)进程通信是指不同进程间数据共享和数据交换。
2.进程通信方法
(1)文件映射。Memory-Mapped Files
文件映射是进程把文件内容当做自己的一块内存地址对待,通过指针操作读取文件内容,而不是IO操作。
Win32 API允许多个进程访问同一文件对象,实现对文件共享。
文件映射只适用于本地机器,不适用于网络,开发者还必须控制进程同步。
(2)共享内存。Shared Memory
共享内存是文件映射一种的特殊情况。
共享内存是用文件映射对象来实现的,只能运行于本地进程之间。
(3)管道。Pipe
管道是拥有两个端点通信句柄的进程间的通信方式。分为单向和双向。单向是指一个端点写,另一个端点读。
管道分为匿名管道和命名管道。匿名管道适用于父进程和子进程、两个子进程之间。匿名管道不能在网上和不相关进程间使用。命名管道适用于不相关的进程和不同计算机之间。命名管道在网络上同时和多个管道通信会困难许多。
(4)邮件槽。Mailslots
邮件槽提供单向通信,但一个进程可以同时是邮件槽服务器和邮件槽客户,实现双向通信。
邮件槽类似命名管道,但是通过不可靠的UDP传输,命名管道采用可靠地链接传输。
邮件槽具有广播信息的能力和简化的编程接口,不失为应用程序发送接收消息的一种选择。
(5)剪切板 Clipped Board windows平台
剪切板实质是Win32 API中一组传输数据的函数和消息。
剪切板只适用于Windows应用程序,不适用于网络。
(6)动态数据交换 DDE windows平台
DDE是利用共享内存实现进程间数据交换的方式。DDE三种数据交换方式:冷链,数据交换一次性数据传输,与剪切板类似;温链,数据交换时服务器通知客户,客户请求数据;热链,数据交换时服务器自动给客户发送数据。
DDE适用于单机或网络不同计算机应用程序之间。基于Windows的应用程序支持DDE。
(7)对象链接与嵌入 OLE windows平台
OLE拥有管理多种数据格式的复合文档。
同DDE类似,大多数Windows应用程序支持。
(8)动态链接库 DLL windows平台
Win32动态链接库中的全局数据供调用DLL的所有进程共享。
DLL数据共享并不安全,建议用带有权限控制的共享内存方法。
(9)远程过程调用 RPC windows平台
Win32 API提供的RPC可以使用远程调用函数,适用于单机和网络不通进程,开发者可以可以建立高性能、紧密耦合的分布式应用程序。
(10)Sockets 跨平台
Windows Sockets网络编程接口,通过Sockets实现进程通信的网络应用程序越来越多,主要原因是Socket的跨平台性质比其他IPC机制好的多。socket的唯一缺点是支持的是底层通信操作,使得单机的进程间进行数据传递不方便。
(11)WM_COPYDADA消息,Windows平台单机环境。
功能强大鲜为人知,当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需像处理其它消息那样处理WM_COPY
DATA消息,这样收发双方就实现了数据共享。
它在底层实际上是通过文件映射来实现的。
|