基本信息
- 原书名:The Art of Multiprocessor Programming
- 原出版社: Morgan Kaufmann

编辑推荐
多处理器编程的艺术
The Art of Multiprocessor
Programming
(美)Maurice Herlihy
(以)Nir Shavit 著
目前,多处理器的编程技术受到广泛关注,多处理器编程要求理解新型计算原理、算法及编程工具,至今很少有人能够精通这门编程艺术。
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的算法技术。本书所涵盖的多处理器编程关键问题将使在校学生以及相关技术人员受益匪浅。
本书特色\循序渐进地讲述共享存储器多线程编程的基础知识。
详细解释当今多处理器硬件对并发程序设计的支持方式。
全面考察主流的并发数据结构及其关键设计要素。
从简单的锁机制到最新的事务内存系统,独立、完整地阐述了同步技术。
利用Java并发工具包编写的可完全执行的Java实例。
附录提供了采用其他程序设计语言和包(如C#、C及C++的PThreads库)进行编程的相关背景知识以及硬件基础知识。
作者简介
Maurice Herlihy
哈佛大学的数学学士和麻省理工学院的计算机科学博士,目前为美国布朗大学计算机科学系教授,曾工作于卡内基-梅隆大学和DEC剑桥实验室。他是美国ACM会士,2003年分布式计算Dijkstra奖获得者。
Nir Shavit
以色列希伯来大学的计算机科学博士,自1992年起执教于特拉维夫大学计算机科学系。他曾多年担任麻省理工学院的客座教授,自1999年以来担任Sun实验室的技术人员。
两位作者是2004年ACM/EATCS G?del奖的共同获得者,40多年来一起合作从事并发程序设计教学。
内容简介
计算机书籍
本书从原理和实践两个方面全面阐述了多处理器编程的指导原则,包含编制高效的多处理器程序所必备的算法技术。此外,附录提供了采用其他程序设计语言包(如C#、C及C++的PThreads库)进行编程的相关背景知识以及硬件基础知识。.
本书适合作为高等院校计算机及相关专业高年级本科生及研究生的教材,同时也可作为相关技术人员的参考书。..
目前,多处理器的编程技术受到广泛关注,多处理器编程要求理解新型计算原理、算法及编程工具;至今很少有人能够精通这门编程艺术。
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的算法技术。本书所涵盖的多处理器编程关键问题将使在校学生以及相关技术人员受益匪浅。
本书特色
·循序渐进地讲述共享存储器多线程编程的基础知识。
·详细解释当今多处理器硬件对并发程序设计的支持方式。
·全面考察主流的并发数据结构及其关键设计要素。
·从简单的锁机制到最新的事务内存系统,独立、完整地阐述了同步技术。
·利用Java并发工具包编写的可完全执行的Java实例。
目录
译者序
前言
第1章引言
1.1共享对象和同步
1.2生活实例
1.3生产者—消费者问题
1.4读者—写者问题
1.5并行的困境
1.6并行程序设计
1.7本章注释
1.8习题
第一部分原理
第2章互斥
2.1时间
2.2 1临界区
2.3双线程解决方案
2.4过滤锁
2.5公平性
2.6 Bakery算法
译者序
自20世纪中叶第一台通用电子计算机研制成功以来,程序的编制大多是基于顺序计算模型的,程序的执行过程是操作的有序序列。由于顺序计算机能够用图灵机精确地描述,因此顺序计算的编程能在一组易于理解且完备定义的抽象之上进行,而不需要了解底层的细节。近年来,尽管单处理器仍在发展,但由于指令级并行的开发空间正在减少,再加上散热等问题限制了时钟频率的继续提高,所以单处理器发展的速度正在减缓,这最终导致了起源于在单独一个晶片上设计多个内核的多处理器系统结构的出现。多处理器系统结构允许多个处理器执行同一个程序,共享同一程序的代码和地址空间,并利用并行技术来提高计算效率。在这种计算模型中,并发程序的执行可以看做是多个并发线程对一组共享对象的操作序列,为了在这种异步并发环境中获得更好的性能,底层系统结构的细节需要呈现给设计者。
作为一名优秀的程序设计员,在编写多处理器程序之前首先应弄清楚多处理器计算机的能力和限制是什么,在异步并发计算模型中什么问题是可解决的,什么问题是不可解决的,是什么使得某些问题很难计算,而又使另一些问题容易计算。这要求设计者具备一定的多核并行计算理论基础知识,掌握多处理器系统结构上并发计算模型的可计算性理论及复杂性理论。其次,应掌握基本的多核平台上的并行程序设计技术,包括并行算法、同步原语以及各种多核系统结构。..
Maurice Herlihy教授和Nir Shavit教授在并发程序设计领域具有很深的造诣,并拥有40年以上一起从事并发程序设计教学的合作经验。他们对多处理器并行程序设计技术做出了巨大的贡献,并因此而成为2004年ACM/EATCS G6del奖的共同获得者。这本由他们合著的专著致力于解决如何采用更好的并行算法来克服多核并发程序并行度低的问题。
Amdahl定律早已明确地告诉我们,从程序本身可获得的并行度是有限的,加速比的提高主要取决于程序中必须增加的串行执行部分,而这部分又往往包含着具有相对较高开销的通信和协作。因此,在多处理器系统结构上,如何提高程序中必须串行部分的并行度,以及降低并行处理器中远程访问的时延是我们目前面临的两大技术挑战。对这些问题的有效解决,必须依靠软件技术和硬件技术的改进和发展。本书则侧重于对前一个挑战的研究。
作者先从宏观的抽象角度出发,在一个理想化的共享存储器系统结构中研究各种并行算法的可计算性及正确性。通过对这些经典算法的推理分析,向读者揭示了现代协作范例和并发数据结构中所隐藏的核心思想,使读者学会如何分析饥饿和死锁等微妙的活性问题,深层次地研究现代硬件同步原语所应具有的能力及其特性。随后,从微观的实际角度出发,针对当今主流的多处理器系统结构,设计了一系列完美高效的并行算法及并发数据结构,并对各种算法的效率及其机理进行了分析。所有的设计全部采用Java程序设计语言详细地描述,可以非常容易地将它们扩展到实际应用中。
本书的前6章讲述了多处理器程序设计的原理部分,着重于异步并发环境中的可计算性问题,借助于一个理想化的计算模型来阐述如何描述和证明并行程序的实际执行行为。由于其自身的特点,多处理器程序的正确性要比顺序执行程序的正确性复杂得多,书中为我们展现了一系列不同的辅助论证工具,令人有耳目一新之感。随后的11章阐述了多处理器程序设计的实践部分。由于在多处理器环境中编写程序时,底层系统结构的细节并不像编写顺序程序那样被完全隐藏在一种编程抽象中,因此,本书在附录B介绍了多处理器硬件的基础知识。最后的第18章介绍了当今并发问题研究中最先进的事务方法,可以预言这种方法在今后的研究中将会越来越重要。
感谢王振飞博士在本书第13~18章翻译中所做的工作,感谢胡丽婷、袁旻昊、耿玮、蔡硕、张亮同学在本书翻译的初始资料整理中所给予的帮助。
译者
2009年4月...
前言
读者应具备一定的离散数学基础知识,能够理解“大O”符号的含义,以及它在NP完全问题中所起的作用,熟悉计算机系统的基本组成部件,如处理器、线程、高速缓存等,为了能够理解书中的实例,还需要具备初步的Java知识。(在使用这些高级程序设计语言之前,本书阐述了语言的相关功能特征。)书中提供两个附录以供读者参考:附录A包含程序设计语言的相关知识,附录B给出了多处理器硬件系统结构的相关内容。
本书前三分之一涵盖并发程序设计的基本原理,阐述并发程序设计的编程思想。就像掌握汽车驾驶技术、烹饪食物和品尝鱼子酱一样,并发思维也需要培养,需要适当的努力才能学好。希望立刻动手编程的读者可以跳过这部分的大多数内容,但仍需阅读第2章及第3章的内容,这两章包含了理解本书其他部分所必不可少的基本知识。
在原理部分中,首先讨论了经典的互斥问题(第2章),包括诸如公平性和死锁这样的基本概念,这对于理解并发程序设计的难点尤为重要。然后,结合并发执行和并发设计中可能出现的各种情形和开发环境,给出了并发程序正确性的定义(第3章)。接着,研究了对并发计算至关重要的共享存储器的性质(第4章)。最后,介绍了几种为实现高并发性数据结构而使用的同步原语(第5、6章)。
对于每一位渴望真正掌握多处理器编程艺术的程序设计人员来说,花上一定的时间去解决本书第一部分所提及的问题是很有必要的。虽然这些问题都是理想化的,但它们为编写高效的多处理器程序提供了非常有益的编程思想。尤为重要的是,通过在问题解决中获取的思维方式,能够避免出现那些初次编写并发程序的设计人员普遍易犯的错误。
接下来的三分之二讲述并发程序设计的具体实践。每章都有一个相应主题,阐明一种特定的程序设计模式或者算法技巧。第7章从系统和语言这两个不同的抽象层面,讨论争用及自旋锁的概念,强调了底层系统结构的重要性,指出对于自旋锁性能的理解必须建立在对多处理器层次存储结构充分理解的基础上。第8章涉及等待及管程锁的概念,这是一种常用(特别是在Java中)的同步用语。第16章包括并行性及工作窃取问题,第17章则介绍了障碍技术,这种技术往往在具有并发结构的应用中得以广泛的使用。..
其他章节讲述各种类型的并发数据结构。它们均以第9章的概念为基础,因此建议读者在阅读其他章节之前首先阅读第9章的内容。该章采用链表结构来阐明各种类型的同步模式,包括粗粒度锁、细粒度锁及无锁结构。第10章则借助于FIFO队列说明在使用同步原语时可能出现的ABA问题,第11章通过栈描述了一种重要的同步模式——消除,第13章通过哈希映射阐述如何利用固有并行进行算法设计。高效率的并行查找技术则借助于跳表来阐述(第14章),而如何通过降低正确性标准来获得更高的性能则通过优先级队列进行了阐述(第15章)。
最后,第18章介绍了在并发问题的研究中新出现的事务方法,可以确信这种方法在不远的将来会变得越来越重要。
并发性的重要性还没有得到人们的广泛认可。在此,引用《纽约时报》1989年关于IBMPC中新型操作系统的一段评论:
真正的并发(当你唤醒并使用另一个程序时原来的程序仍继续运行)是非常令人振奋的,但对于普通使用者来说用处却很小。您能有几个程序在执行时需要花费数秒甚至更多的时间呢?
致谢
感谢Doug Lea、Michael Scott、Ron Rivest、Tom Corman、Michael Sipser、Radia Pearlman、George Varghese和Michael Sipser在本书出版过程中所做的努力和给予的帮助。
感谢在本书的起草和修订过程中,向我们提供了大量宝贵意见的所有学生、同事和朋友:Yehuda Afek, Shai Ber, Martin Buchholz, Vladimir Budovsky, Christian Cachin, Cliff Click,Yoav Cohen, Dave Dice, Alexandra Fedorova, Pascal Felber, Christof Fetzer, Shafi Goldwasser, Rachid Guerraoui, Tim Harris, Danny Hendler, Maor Hizkiev, Eric Koskinen,Christos Kozyrakis, Edya Ladan, Doug Lea, Oren Lederman, Pierre Leone, Yossi Lev, Wei Lu, Victor Luchangco, Virendra Marathe, John Mellor-Crummey, Mark Moir, Dan Nussbaum,Kiran Pamnany, Ben Pere, Torvald Riegel, Vijay Saraswat, Bill Scherer, Warren Schudy,Michael Scott, Ori Shalev, Marc Shapiro, Yotam Soen, Ralf Suckow, Seth Syberg, Alex Weiss和Zhenyuan Zhaoo。同时,也向在这里没有提及的许多朋友表示道歉和感谢。
感谢Mark Moir、Steve Heller和Sun公司的Scalable Synchronization小组成员,他们为本书的撰写提供了巨大的支持和帮助。...