新書推薦:
![谁动了我的钱包——解构消费领域中的认知陷阱](http://103.6.6.66/upload/mall/productImages/24/26/9787577206769.jpg)
《
谁动了我的钱包——解构消费领域中的认知陷阱
》
售價:HK$
57.3
![领导力教练 世界著名企业教练们的实践心得](http://103.6.6.69/upload/mall/productImages/y24/8/9787115645371.jpg)
《
领导力教练 世界著名企业教练们的实践心得
》
售價:HK$
80.3
![没有世界观的世界(第2版)(守望者)](http://103.6.6.66/upload/mall/productImages/24/28/9787300329253.jpg)
《
没有世界观的世界(第2版)(守望者)
》
售價:HK$
113.6
![成为母亲:一场心灵的奇异旅行](http://103.6.6.66/upload/mall/productImages/24/27/9787522913490.jpg)
《
成为母亲:一场心灵的奇异旅行
》
售價:HK$
66.7
![金融赋能:使命驱动的银行和金融的未来](http://103.6.6.69/upload/mall/productImages/y24/7/9787115630803.jpg)
《
金融赋能:使命驱动的银行和金融的未来
》
售價:HK$
68.9
![时刻人文中国梦境:公元前300年公元800年](http://103.6.6.66/upload/mall/productImages/24/26/9787547323762.jpg)
《
时刻人文中国梦境:公元前300年公元800年
》
售價:HK$
89.7
![出去一趟,还是家里舒服](http://103.6.6.69/upload/mall/productImages/y24/8/9787521766288.jpg)
《
出去一趟,还是家里舒服
》
售價:HK$
56.4
![阿根廷史:从昔日辉煌到现代迷思](http://103.6.6.66/upload/mall/productImages/24/26/9787547322512.jpg)
《
阿根廷史:从昔日辉煌到现代迷思
》
售價:HK$
112.7
|
編輯推薦: |
邀请多个高校的知名学者和多个公司的CEO为本教材撰写序,本教材对并行编程的基本概念和技术原理进行了详解,适合作为普通高校本科生和研究生教材,内容深入浅出,讲解详尽。
|
內容簡介: |
本书对并行编程过程中的相关基本概念、原理、技术、方法进行详细讲解,以时下流行的Java语言为基础,主要针对基于共享内存的并行编程方法,内容涉及并行编程基本概念、线程创建和管理、同步和异步编程、线程协作、自定义并发类等内容。本书在讲解相关原理和技术的同时,使用大量实例进行演示,力求做到知识点明白透彻。
本书内容先进、结构合理、讲解详尽、例题丰富,适合作为高等院校本科生和研究生的教材,是高等院校师生和IT领域在职人员学习并行编程技术的理想教材和工具书,也可作为高性能计算技术人员的自修参考用书。
|
目錄:
|
第1章绪论1
1.1概述1
1.2并发与并行2
1.2.1并发2
1.2.2并行3
1.3Flynn分类4
1.4并行编程模型4
1.4.1多线程并行模型4
1.4.2共享内存并行模型5
1.4.3分布式并行模型6
1.4.4混合并行编程模型7
1.4.5数据并行模型7
1.5并行程序设计方法8
1.5.1分治8
1.5.2流水线9
1.5.3消息传递10
1.6加速比10
1.6.1阿姆达尔定律10
1.6.2高斯特凡定律11
1.7并行程序评判标准11
1.8Java并行13
1.8.1并行特性13
1.8.2内存模型14
1.9程序运行说明15
习题17
第2章线程18
2.1基本概念18
2.1.1进程与线程18
2.1.2超线程18
2.2线程的创建19
2.2.1不带返回值的线程——从Thread类继承19
2.2.2不带返回值的线程——实现Runnable接口22
2.2.3带返回值的线程——实现Callable接口24
2.2.4简化线程创建代码25
2.3线程的属性28
2.3.1线程标识符28
2.3.2线程名30
2.3.3线程状态34
2.3.4优先级37
习题41
并行编程目录第3章线程的管理42
3.1线程数目的确定42
3.2线程运行的控制43
3.2.1等待线程执行完毕43
3.2.2休眠47
3.2.3中断48
3.2.4让出CPU的使用权50
3.3守护线程52
3.4线程分组55
3.5线程本地化58
3.6线程开销问题60
习题62
第4章锁63
4.1概述63
4.2基本概念63
4.2.1数据竞争63
4.2.2线程安全64
4.2.3临界区65
4.2.4监视器65
4.3为什么使用同步控制66
4.4同步锁68
4.4.1同步方法68
4.4.2同步块70
4.5可重入锁72
4.6读写锁80
4.7邮戳锁87
4.8锁的缺点94
4.8.1锁竞争94
4.8.2优先权反转95
4.8.3死锁95
4.8.4活锁98
4.9本章小结100
习题101
第5章原子操作102
5.1原子性102
5.2基本类型的原子操作103
5.3引用类型的原子操作106
5.4ABA问题108
5.5扩展的原子引用类型111
5.5.1类AtomicMarkableReference111
5.5.2类AtomicStampedReference114
5.6原子操作数组类117
5.7volatile关键字122
5.7.1可见性122
5.7.2原子性122
5.7.3指令重排122
5.8本章小结123
习题124
第6章异步模式125
6.1基本概念125
6.1.1同步和异步125
6.1.2阻塞和非阻塞125
6.1.3回调126
6.1.4I/O密集型任务和计算密集型任务126
6.2接口Future126
6.3类FutureTask127
6.4类CompletableFuture133
6.4.1类的定义133
6.4.2创建对象133
6.4.3获取返回值134
6.4.4执行模型135
6.4.5多个异步任务处理144
6.4.6使用回调函数147
6.4.7综合应用实例152
6.5本章小结155
习题156
第7章线程协作157
7.1通过共享变量进行协作157
7.2等待集合160
7.3等待与通知160
7.4条件变量168
7.5交换器174
习题178
第8章线程障栅179
8.1概述179
8.2循环障栅179
8.3倒计时门闩184
8.4信号量188
8.5阶段193
习题201
第9章线程池管理202
9.1线程池202
9.1.1为什么使用线程池202
9.1.2相关接口和类202
9.1.3应用举例207
9.2固定数目的线程池209
9.3延迟执行、周期性执行的执行器214
9.4取消任务的执行219
9.5任务装载和结果处理的分离220
9.6管理被拒绝的任务223
习题225
第10章并行模式Fork/Join226
10.1基本概念226
10.1.1任务划分226
10.1.2负载均衡227
10.1.3工作窃取227
10.2Fork/Join框架的编程模式228
10.3线程池ForkJoinPool229
10.3.1创建ForkJoinPool对象229
10.3.2使用ForkJoinPool230
10.4任务ForkJoinTask231
10.4.1从类RecursiveAction继承创建任务232
10.4.2从类RecursiveTask继承创建任务238
10.4.3任务的运行方式242
10.4.4任务的取消245
10.5本章小结247
习题248
第11章线程安全的集合249
11.1线程安全的哈希表249
11.1.1类ConcurrentHashMap249
11.1.2类HashTable252
11.1.3方法Collections.synchronizedMap253
11.2线程安全的双端队列253
11.3线程安全的跳表257
11.4同步队列259
11.5随机数产生262
11.6并行流264
11.6.1函数式接口Predicate264
11.6.2流的创建265
11.6.3流的操作266
习题268
第12章定制并行类269
12.1定制同步类269
12.1.1定制锁269
12.1.2定制原子操作272
12.2定制线程工厂275
12.3定制线程池277
12.4定制线程执行器279
12.5定制周期性任务281
12.6定制与Fork/Join框架相关的并发类285
12.6.1类ForkJoinWorkerThread285
12.6.2接口ForkJoinPool.ForkJoinWorkerThreadFactory285
12.6.3自定义Fork/Join框架中的线程285
12.6.4自定义任务288
习题291
第13章并行程序设计实例292
13.1桶排序及其并行化292
13.1.1桶排序过程292
13.1.2并行化292
13.2奇偶排序及其并行化297
13.2.1奇偶排序算法的过程297
13.2.2并行化300
13.3加密/解密算法及其并行化306
13.3.1加密/解密过程及相关代码306
13.3.2并行化314
|
內容試閱:
|
并行编程(parallel programming)的概念早在20世纪中期就已经提出,并在20世纪中晚期开始流行,不过受硬件限制,只在拥有高性能计算机的实验室和工业界中使用,参与并行编程的人员都是经过专门培训的。近年来,多核处理器的普及和众核处理器的不断发展为并行编程的普及提供了硬件支撑平台,人们不再为昂贵的硬件平台所限,越来越多的人开始有机会接触并使用并行编程技术,并行编程也不再局限于从事计算机编程的专业人士,其他行业的人员也开始使用该技术提升程序的性能。
高性能是计算机系统追求的目标之一,处理器无疑是提高计算机系统性能的核心部件。然而,由于处理器芯片的设计和制造工艺已经达到了极限,而且考虑到功耗和散热等问题,处理器的运算能力已经很难再通过增加晶体管的数量提高。2005年前后,处理器制造商不得不采用新的方式提高计算机的运算能力,Intel、AMD和IBM等公司利用并行计算理论的相关知识设计了多核处理器,希望以此继续提高处理器的运算速度。
随着多核处理器的普及,学术界和工业界普遍认为并行程序设计将成为未来软件开发技术的主流。并行程序设计不仅继承了传统程序设计中的理论和方法,而且对传统程序设计提出了许多新的挑战,突出表现在并行算法设计、并行基础架构、并行计算思维等方面。很多程序设计人员对于传统的串行程序设计较为熟悉,但对并行程序设计的相关理论和方法还有待于深入学习。
并行编程相关课程在中国科学技术大学、北京理工大学、哈尔滨工业大学、河北科技大学、西北农林科技大学等高校已经开设多年,国内外产出了一批优秀的教材,如《并行计算》《并行程序设计导论》《并行计算导论》等,这些教材各有特色,但随着技术的不断更新,相关教材的建设仍须进一步完善,亟须将并行程序设计技术和目前流行的编程语言结合起来,深入开展相关的科研和教学工作。国外在并行程序设计方面也有一些优秀的教材,理论和实践知识深入,但其撰写方式、逻辑思路和语言风格不符合我国学生的阅读习惯,不适合作为我国高等院校的教材。
为了帮助更多的人了解和掌握并行编程的理论、方法和技术,作者编写了本书,主要在Java语言的框架下介绍并行编程知识。虽然本书介绍的相关知识只是Java语言生态系统中之冰山一角,但也覆盖了绝大多数并行编程的概念以及JDK并发库中大部分并发工具类的使用方法。需要特别说明的是,JDK并发库只提供了一个并发编程工具库,并行编程过程中重要的是并行编程思维习惯的培养。作者希望在介绍并发编程相关知识的同时,可以培养读者并发编程的思想和思维习惯,引领读者进入并行程序设计的宇宙中,为高性能程序设计人才的培养抛砖引玉,贡献自己的微薄力量。
支持多线程是Java语言的重要特征之一,在学习本书之前,读者应学习Java编程的基础知识。本书重点对Java多线程编程的相关知识进行介绍,具体内容涉及线程定义、线程管理、锁和原子操作、异步模式、线程协作、线程池和Fork/Join框架等内容,大部分内容在讲解知识的同时都通过例题加以演示,并在JDK版本下调试运行通过,大部分例题的演示采用“提出问题—分析问题—代码实现—结果展示—结果分析—相关讨论”的思路,力求做到明白透彻。然而由于作者的学识和水平所限,有些程序的代码可能不是的,恳请各位读者对本书的相关内容提出改进意见和建议,以继续优化本书。
本书的姊妹版是《并行编程(Python版)》,该书主要基于Python语言对并行程序设计方法进行介绍,主要内容涉及线程和进程编程、OpenMP共享内存并行编程模型、消息传递编程模型和异步编程等内容。由于都是讲述并行编程知识,部分内容将与本书重合,但使用了不同的语言对相关知识点进行了编程实现。由于JDK中没有提供消息传递和OpenMP的支持,因此本书偏重于共享内存并行程序设计知识,但《并行编程(Python版)》一书将从共享内存、消息传递等方面对并行程序设计方法进行介绍,是本书内容的有益补充,该书正在撰写中。两书将各有特色,各有千秋,形成互补,期望帮助读者根据自己熟悉的编程语言进行并行编程学习。
本书内容先进、结构合理、讲解详尽、例题丰富、深入浅出,是初学者学习并行编程概念、理论、方法和编程技巧的理想教材,适合普通高校、实践和工程类院校学生在学习高性能程序设计时使用,是高等院校学生和IT领域在职人员学习并行编程技术的理想教材和工具书,也可作为高性能计算技术人员的自修参考用书。本书不仅对JDK较早版本中的内容进行讲解,而且对JDK版本中发布的很多新的并发类和接口进行介绍。
全书共13章,第1章简要介绍并行程序设计的基础知识;第2章介绍Java线程创建;第3章介绍线程的管理;第4~5章讲解线程同步控制方法;第6章讲解异步编程模式;第7~8章介绍线程间协作和障栅的相关知识;第9~10章介绍线程池执行器和Fork/Join框架;第11章介绍如何使用线程安全的集合操作;第12章介绍如何定制适合特定需求的并发类;第13章通过大型实际应用程序例子对并行程序的开发进行介绍。
本书作为教材已经应用于河北科技大学信息科学与工程学院的本科生和研究生“并行程序设计”课程中,已经过两轮教学实践的检验,作者认为本书的内容安排能够适应教学进程,除了第4章内容可以选讲外,其他章节均安排合理,本书配套的教学内容在中国大学MOOC和超星学习通上配有视频讲解,欢迎广大读者在学习的同时对本书的视频内容批评指正。
在本书的写作过程中,很多计算机领域的学者和教师对本书的编写工作提出了很多建设性的意见和建议,国内外众多的经典教材、研究成果和相关网站也为本书提供了参考,在此一并表示衷心的感谢。感谢美国普渡大学计算机科学系张翔宇教授,在我做访问学者期间,张教授让我感受到了专业的学术精神和良好的科研氛围,也让我可以有时间对本书的内容进行思考,同时也给了我很多有益的建议,是难得的良师益友。此外,感谢我的家人,写作工作枯燥且耗时较长,但得到了他们的大力支持,他们承担了大部分繁杂的家务工作,让我可以集中精力,有更多的时间写作。特别感谢我的儿子,成长路上他学会了努力上进,学会了顽强拼搏,在生活中学会了关心他人,他常常在我写作几小时、腰酸背疼的时候给我捶背揉肩,使我可以享受这独一无二的待遇,父子情深,感恩遇见!
由于编者学识和水平有限,书中的错漏和不妥之处在所难免,恳请广大读者批评指正,以便今后不断完善、改进、优化本书。
2023年2月
|
|