本书以作者成功的软件设计和实现的经验系统地论述了使用C++语言进行并行与分布式编程的技术,对并行与分布式编程中固有的问题提出了多种解决方案。\r\n 本书的主要内容有:并发编程的乐趣;并行和分布式编程的挑战;将C++程序分成多个任务;将C++程序分成多个线程;任务间并发的同步;通过PVM为C++增加并行编程能力;错误处理、异常和软件可靠性;C++分布式面向对象编程;MPI与使用模板的SPMD和MPMD模型;可视化并发和分布式系统设计;设计支持并发的组件;实现面向agent的体系结构;使用PVM、线程和C++组件的黑板体系结构。除此之外,本书还提供了包含Pthread线程库的新POSIX/UNIX IEEE标准,可供编程人员参考。\r\n 本书适合于计算机编程人员、软件开发人员、设计人员、研究人员和软件设计师阅读,也可作为希望使用C++进行并行与分布式软件开发的计算机专业学生的入门教材。
译者序\r\n序言\r\n第1章 并发编程的乐趣 \r\n 1.1 什么是并发? \r\n 1.2 并行编程的优点 \r\n 1.3 分布式编程的优点 \r\n 1.4 最少的工作需求 \r\n 1.5 软件并发的基本层次 \r\n 1.6 C++中没有支持并行性的关键字 \r\n 1.7 并行和分布式编程的编程环境 \r\n 小结——关于并发 \r\n第2章 并行和分布式编程的挑战 \r\n 2.1 范例转移 \r\n 2.2 协调问题 \r\n 2.3 间或的硬件失效与软件退出 \r\n 2.4 过多的并行化或分布式可能产生负面后果 \r\n 2.5 选择一种好的体系结构需要进行研究 \r\n 2.6 对不同测试和调试技术的需求 \r\n 2.7 在并行或分布式设计中必须进行交流\r\n 小结 \r\n第3章 将C++程序分成多个任务 \r\n 3.1 进程的定义 \r\n 3.2 进程剖析 \r\n 3.3 进程状态 \r\n 3.4 进程调度 \r\n 3.5 上下文切换\r\n 3.6 创建进程 \r\n 3.7 终止进程 \r\n 3.8 进程资源 \r\n 3.9 什么是异步进程和同步进程 \r\n 3.10 将程序分成多个任务 \r\n 小结 \r\n第4章 将C++程序分成多个线程 \r\n 4.1 线程的定义 \r\n 4.2 线程剖析 \r\n 4.3 线程调度 \r\n 4.4 线程资源 \r\n 4.5 线程模型 \r\n 4.6 Pthread库介绍 \r\n 4.7 简单多线程程序剖析\r\n 4.8 创建线程 \r\n 4.9 管理线程 \r\n 4.10 线程安全和线程库 \r\n 4.11 将程序分解成多个线程 \r\n 小结 \r\n第5章 任务间并发的同步 \r\n 5.1 执行顺序的协调 \r\n 5.2 同步数据访问 \r\n 5.3 什么是信号量?\r\n 5.4 面向对象的同步方法\r\n 小结 \r\n第6章 通过PVM为C++增加并行编程能力 \r\n 6.1 PVM支持的经典并行模型 \r\n 6.2 为C++语言提供的PVM库 \r\n 6.3 PVM的基本机制 \r\n 6.4 在PVM任务中访问标准输入(stdin)和标准输出(stdout) \r\n 小结 \r\n第7章 错误处理、异常和软件可靠性 \r\n 7.1 什么是软件可靠性? \r\n 7.2 软件层和硬件组件中的失效 \r\n 7.3 依赖于软件规范的缺陷定义 \r\n 7.4 考虑在哪里处理缺陷与在哪里处理异常 \r\n 7.5 软件可靠性:一个简单方案 \r\n 7.6 在错误处理中使用Map对象 \r\n 7.7 C++的异常处理机制 \r\n 7.8 事件图、逻辑表达式和逻辑图 \r\n 小结 \r\n第8章 C++分布式面向对象编程 \r\n 8.1 工作的分解与封装 \r\n 8.2 访问其他地址空间中对象 \r\n 8.3 基本CORBA消费者剖析 \r\n 8.4 CORBA生产者剖析 \r\n 8.5 CORBA应用程序的基本设计蓝图 \r\n 8.6 名字服务 \r\n 8.7 深入了解对象适配器\r\n 8.8 实现池与接口池 \r\n 8.9 使用CORBA的简单分布式Web服务 \r\n 8.10 交易服务 \r\n 8.11 客户/服务器范例\r\n 小结 \r\n第9章 MPI与使用模板的SPMD和MPMD模型 \r\n第10章 可视化并发和分布式系统设计 \r\n第11章 设计支持并发的组件 \r\n第12章 实现面向agent的体系结构 \r\n第13章 使用PVM、线程和C++组件的黑板体系结构 \r\n附录A 类与对象图解\r\n附录B 系统接口
为了使用多线程技术在分布式环境下进行项目开发,我们阅读过很多并行与分布式编程方面的书籍,这些书籍确实也让我们学到不少如何进行并行与分布式编程的技能,学会了使用一些工具进行并行与分布式编程,比如使用CORBA进行分布式编程等等。但是,我们一直没有完整地认识并行与分布式编程中所固有的问题,更不可能对这些问题提出非常漂亮的解决方案,因此,在项目的实际开发过程中,总是 “只见树木,不见森林”,不能“由此及彼,由表及里”。尤其是在进行分布式系统建模时,有无从下手的感觉。看完本书后,我们豁然开朗,对并行与分布式编程有了崭新的认识,解决了一些实际开发过程中一直困扰我们的疑团。
与其他很多有关并行与分布式编程的书籍相比,本书不是详细地介绍用于并行与分布式编程的工具的使用,而是从分析并行与分布式编程中固有的问题入手,并紧紧围绕这些问题,从程序体系结构的角度系统地提出了多种解决方案及模型。它除了能够帮助我们了解用于并行与分布式编程的一些技术和开发工具之外,其显著特点在于书中提出了支持并行与分布式编程的软件组织方法,使我们能够从整体上把握并行与分布式编程的关键。这一点无论对编程人员还是软件设计师都是至关重要的。
本书的翻译人员由国防科技大学计算机学院并行与分布式计算方向的研究人员组成,他们都参加过国家“863”重点课题的研究工作,具备丰富的理论和实践经验。
非常感谢CAMERON HUGHES和TRACEY HUGHES为我们带来一本如此优秀的著作,我们从本书中学到很多以前想学而没有学到的东西,极大地拓宽了我们的视野。如果你正在进行并行或分布式软件开发,或者希望进行并行或分布式软件开发,那么,本书必定是一本不可多得的参考书籍。
本书主要由肖和平、张杰良翻译。参加本书翻译的还有方小永、张绪冰、曲向丽、李磊、李蕾等。全书最后由张杰良统稿。Be Flying工作室负责人肖国尊负责本书的译员组织与翻译质量和进度的控制。由于我们的水平有限,错误与不到位之处在所难免。敬请广大读者提供反馈意见,读者可以将意见e-mail至be_flying@sohu.com,我们会仔细查阅读者发来的每一封邮件,以求进一步提高今后翻译的质量。
译者
2003年12月28日下午
CAMERON HUGHES是CTEST实验室的一名高级软件工程师,同时还是Youngstown 州立大学的一名编程人员/分析师。他参与了各种规模的软件开发工作,目前正在参与Proteus V 系统的集群编程,该系统使用了CTEST实验室和Youngstown大学的NLP和知识表示建模方法。
TRACEY HUGHES是CTEST实验室的一名软件工程师,她在该实验室进行图形编程、C++模拟、图像处理类库以及虚拟世界的开发。
他们二人合著了许多作品,包括《Linux Rapid Application Development》和《Object-Oriented Multithreading Using C++》等。