2008年7月18日,著名技术专家、畅销技术图书《Windows编程循序渐进》的作者张静盛老师做客51CTO.com,同网友就Windows编程的进程间通信问题进行面对面交流。
![]() |
张静盛老师目前在盛大网络从事技术研究工作,他从2005年开始担任知名技术社区Windows编程版主,网名“北极星”被很多技术爱好者所熟知。2008年6月份,张静盛推出他的第一本个人技术图书《Windows编程循序渐进》,上市一个月来取得了很好的销售成绩。
在一个多小时的在线沟通过程中,张静盛老师回答了网友数十个经典问题,以下为聊天实录,51CTO.com略有整理。
进程间通信基本知识
主持人:什么是进程间通信?常见有哪些进程间通信方式有哪些?请张老师先给大家普及一下基础知识吧。
张静盛:首先得了解什么是进程。进程是一个正在运行的程序的实例,主要由两部分组成:(1)一个操作系统用来管理进程的内核对象。(2)创建时系统所分配的资源,主要是内存地址空间。
进程间通信是指在多进程环境下,使用的数据交互、事件通知等方法使各进程协同工作。常用的有4种:消息传递、共享内存、管道、剪贴板:
(1)消息传递:不以进程为界限,处理消息的是窗体(包括子窗体、控件等),而与是否在同一进程无关。
(2)共享内存:在一个进程内创建内存映射,却能够在其他都个进程中使用。这些进程共享的是物理存储器的同一个页面,在把这些物理内存映射到虚拟内存时各个进程的虚拟地址并不一定相同。当一个进程将数据写入共享内存时,其他进程可以立即获取数据变更情况。
(3)管道和邮槽:其实是对共享内存的两种不同的封装机制。
(4)剪贴板:Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局共享内存,可用于被各进程暂时存储数据。写入进程首先创建一个全局内存块,并将数据写到该内存块;接受数据的进程通过剪贴板机制获取此内存块的句柄,并完成对该内存块数据的读取。
主持人:刚才已经有网友提到了使用文件映射机制实现进程间通信的问题,我们请张老师谈谈这个问题。
张静盛:文件映射机制属于内存管理的一部分。在实际开发过程中,往往能够为大文件操作提供便捷、高效地操作方式。
网友问:张老师:进程通讯大多数人都说 event方法好些,方便,你认为呢?
张静盛:进程间通信的各种方法都有特定的用处,并不能说event方法就是好的,而是需要根据具体应用情况来判定。例如进程间通信有“数据”通信与“通知”通信。张前者传递的数据;后者传递的是“通知”,例如A进程通知B进程,我已经做了某件事。此时用event比较合适。而event在传数据的时候就不合适了。
网友问:还有个问题请问老师……关于管道通信,能否给举个具体的事例?
张静盛:关于管道通信:这是典型进程间数据通信的方法。管道通信的本质是内存映射,也就是说,在管道两端的两个进程,共同使用一个内存区域,内存管理器把这片内存映射到这两个进程地址空间。管道的本质只是对这个共享的内存进行了访问控制。使其适用于具体快速开发。关于管道的应用,分匿名管道和命名管道,在《Windows编程循序渐进》一书上有完整的示例。
网友问:进程和线程通信方式有什么不同?
张静盛:区别在于线程的通信比较方便,因为都处于同一个地址空间,而进程通信就不是这样了。
网友问:请问如何在两个进程间传递一个结构、或者指针?管道是不是只能传递char型的字符串?
张静盛:进程间的数据通信,传递的是数据,不能只传一个指针,因为每个进程都有自己独有的地址空间,例如A进程的指针0x12345678,它在B进程中所指向的内存就不同了。管道可以传递任何数据,对于管道来说,传的是一个字节串。无论是什么类型的数据,要传递,最后总是需要格式化成字节串。
网友问:进程通信中数据在传输过程中的保密是如何实现的?进程间通信带来的安全问题在开发中如何应对?
张静盛:进程间通信的安全问题,一般通过数据加密方式来解决。可以在传递之前实现有数据进行加密,例如使用DES对数据进行加密,然后在接收再进行解密还原。但说到底,这个安全也是有时间、范围限制的。
网友问:各种通信机制也五花八门的,请推荐几种比较好的架构或者实现方式
张静盛:通信机制确实很多。但很多都是上层应用的,经过了很多层的封装。基本的也就4 种:消息、共享内存,管道,剪贴版。在我的书中已经总结了。
| 共2页: 1 [2] 下一页 | ||||
|
|
||||
| · 2008年上半年全国软考.. · 杀毒软件评测专题 · 技术人求职简历完备手册 · 思科认证之CCNP考试最.. · CCNA认证考试Pass必备 · 体验Visual Studio 200.. · IT工程师该不该考CCIE.. · 固态硬盘(SSD)开疆扩土 |
· UML统一建模语言 · NAC安全访问控制 · 运营商封堵ADSL共享 中.. · Web安全云时代 · 云计算时代来临 · C#技术开发指南 · 虚拟化的“赤壁之战” · 交换机故障解决指南 |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 · Windows集群服务应用 · C#技术开发指南 |
· 文档格式标准开战 OOXM.. · UML统一建模语言 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · C#技术开发指南 · C#技术开发指南 · Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 |
· UML统一建模语言 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 |
|||