正文

推荐者序

C#并行编程高级教程 作者:(美)Gastón C.Hillar


2011年6月18日,国内著名的电子商务网站——京东商城(http://www.360buy.com/)在周年庆典之际举办大规模促销活动,在抢购狂潮席卷而来时,京东的服务器无法及时处理数量庞大的并发订单请求而瘫痪,结果京东CEO刘强东先生的新浪微博几乎被消费者潮水般的抱怨所淹没……。这个例子充分说明当今社会对高性能软件系统的需求日益突显,而本书所介绍的并行计算技术就可以应用于高性能的软件系统开发。

再说另外一件事。2011年3月,苹果公司发布iPad2,配备了A5 1.0GHz双核处理器,这标志着平板电脑追随台式机和笔记本电脑一同进入“多核时代”。同样在2011年,拥有双核处理器的Android智能手机取得了骄人的销售业绩,表现相当抢眼……

处理器的“多核化”趋势已经势不可挡,这意味着硬件的计算能力在持续增强;很明显,如果软件不能充分应用这些新增的计算能力,计算机硬件技术进步所带来的好处就无法显现出来。

所有这一切都告诉我们:并行计算的时代已经来临。

并行计算并非什么新鲜事物,历史上人们在为拥有多个处理器的计算机系统开发软件时,就已经深入研究了并行计算中的许多问题,并提出了相应的解决方案。

概括起来,可将并行计算技术领域大致分为以下三个比较活跃的子领域:

(1) 并行计算的理论研究,比如针对某类问题设计新的更高效的并行算法。

(2) 构建并行计算基础架构,比如设计新的易于开发并行程序的程序设计语言、开发各种并行开发工具、构造并行组件库等等。

(3) 基于并行计算基础架构构建真实软件系统。

本书介绍的.NET 4“并行扩展(Parallel Extensions)”,就属于上述第2点所涉及的技术领域。

微软于2010年发布的.NET 4包容众多的技术亮点,本书作者为何单单选取.NET 4并行扩展来介绍?

笔者本人也曾仔细研究过.NET 4并行扩展这一技术领域,得到的结论与作者相同——.NET 4并行扩展有其独到之处,并且具有广泛的应用前景。

得到上述结论的依据是什么?这需要介绍一下并行计算软件系统开发技术的发展现状。

当前的并行计算软件系统,多使用操作系统所直接提供的线程来实现。开发人员编写代码“直接操纵”线程完成并行计算软件系统的开发工作。更详细一点说,在开发并行计算软件系统时,开发人员要依据具体应用场景设计或选择一种并行算法,将整个数据处理工作进行切分,然后创建并启动合适数目的线程,并为每个线程分配特定的工作任务。由于一个算法通常会同时存在串行/并行的部分,因此要保证各工作线程之间满足特定的执行顺序需求。除此之外,开发人员还需要确保各线程都能安全地存取共享资源,并妥善处理系统运行期间可能出现的各种异常,……,到了最后,在所有功能开发完毕并通过测试之后,还需要依据系统运行的真实软硬件环境进行性能调优。

与单线程程序相比,多线程程序的开发需要考虑的事项更多,另外,由于同时存在多个同时运行的线程,多线程程序的调试也变得复杂起来。有那么一句虽然不太精确却十分形象的评论:“多线程程序的开发难度是完成同样功能的单线程程序的10倍。”

必须设法提升并行程序的开发效率。为此,Java平台和.NET平台都针对多线程开发提供了功能完备的类库,这使得多线程程序的开发难度降低了不少,但仍然相当麻烦。

在大量的软件开发实践中,人们发现:在更高的抽象层次上开发是提升开发效率的有效途径。.NET 4的并行扩展(Parallel Extensions)走的正是这条路。

.NET 4并行扩展的核心是“任务并行库(TPL:Task Parallel Library)”,它将并行程序的“构造单元”从“线程(Thread)”提升到“任务(Task)”,将任务分派给线程的工作由TPL负责完成,有效降低了.NET平台上并行计算程序的开发难度,提升了开发效率。

本书主要介绍基于.NET 4中的并行扩展开发高性能软件系统所需的知识与技能,从并行计算理论到实际代码再到辅助开发工具,娓娓道来,内容紧贴实际,详尽实用。

以下是本人的阅读建议。

不熟悉TPL的读者需要通读本书的第2章~第6章,这部分内容系统介绍了TPL的基本使用方法,为实际开发所必需。另外,在阅读之前,不妨先看看附录A以“统观全局”。

以下是本书各章节中的一些值得重点关注的亮点:

第1章中有关并行计算的经验之谈很有价值,需要反复品味。

第7章对Visual Studio 2010 并行程序调试器进行了详尽介绍,各种技巧一览无余,是本人所看过的相关书中介绍得最清楚的。

第8章对线程池的介绍非常重要,它是理解TPL工作原理的关键。

第10章有关并行测试和调优的介绍很精彩。

第11章介绍了如何集成Intel所提供的非托管函数库提升软件系统性能,很有参考价值。

附录B展示了UML并发模型,从事“面向对象系统分析与设计(OOAD:Object Orient Analysis & Design)”的系统架构师们可能会对它感兴趣。

附录C介绍了微软所提供的一组TPL附加示例,建议读者好好地阅读一下这些示例代码,从中可以学到比较规范的并行编程技巧,很有参考价值。

下面向读者介绍一下.NET 4并行扩展的主要应用领域。

作为.NET 基类库的有机组成部分,.NET 4并行扩展可以用于传统的桌面和服务器端应用程序。

需要特别指出的是:在微软云计算平台(Azure)中,同样可以使用.NET 4并行扩展以充分利用“云”所提供的强大计算和数据处理能力,而且本人已经在互联网上看到了先例,使用TPL开发能并行执行SQL命令和启动多个并行数据处理任务的组件库。

.NET 4并行扩展的应用领域同样延伸到了Windows Phone和XBox,比如在Codeplex网站上就有一个PortableTPL项目(http://portabletpl.codeplex.com/),使用它就可以在Windows Phone和XBox的游戏及应用开发中使用TPL。

阅读完本书之后,我相信读者也会同意我们的观点,.NET 4并行扩展有着广泛的应用前景,是一项值得认真学习的技术,而本书能为读者掌握这一技术提供切实的帮助。

最后感谢两位译者的辛勤工作,将这本有很大实用价值的书奉献给中国的读者。在此也希望所有读者都能读有所获。

金旭亮          

2011年11月作于北京理工大学


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号