没有合适的资源?快使用搜索试试~ 我知道了~
首页常用几种进程通信方式比较
常用几种进程通信方式比较

文章从文件映射、命名管道、共享内存、邮件槽等不同进程通信方法出发讲述了其原理和优缺点。
资源详情
资源评论
资源推荐

常用的几种进程通信方式的比较
文件映射
文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,
进程不必使用文件 I/O 操作,只需简单的指针操作就可读取和修改文件的内容。
Win32 API 允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。
通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。
应用程序有三种方法来使多个进程共享一个文件映射对象。
(1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。
(2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。
第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它 IPC 机制(有名管
道、邮件槽等)把名字传给第二个进程。
(3)句柄复制:第一个进程建立文件映射对象,然后通过其它 IPC 机制(有名管道、邮件槽等)把对象句
柄传递给第二个进程。第二个进程复制该句柄就取得对该文件映射对象的访问权限。
文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。但文件映射只能用于本地机器的
进程之间,不能用于网络中,而开发者还必须控制进程间的同步。
共享内存
Win32 API 中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对
象时用 0xFFFFFFFF 来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访
问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也
有较好的安全性,也只能运行于同一计算机上的进程之间。
匿名管道
管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道
可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。
匿名管道(Anonymous Pipe)是在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的
无名字的单向管道。通常由父进程创建管道,然后由要通信的子进程继承通道的读端点句柄或写端点句柄,
然后实现通信。父进程还可以建立两个或更多个继承匿名管道读和写句柄的子进程。这些子进程可以使用管
道直接通信,不需要通过父进程。
匿名管道是单机上实现子进程标准 I/O 重定向的有效方法,它不能在网上使用,也不能用于两个不相关
的进程之间。
命名管道
命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名
管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名
字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。
命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,
不过如果要同时和多个进程通信它就力不从心了。
邮件槽
邮件槽(Mailslots)提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,
称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直
到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实
现进程间的双向通信。
通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或指定网络区域中所有计算机上有同
样名字的邮件槽发送消息。广播通信的消息长度不能超过 400 字节,非广播消息的长度则受邮件槽服务器
指定的最大消息长度的限制。
邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报(如 TCP/IP 协议中的 UDP 包)完成的,

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论5