多处理器编程的艺术

多处理器编程的艺术 pdf epub mobi txt 电子书 下载 2026

出版者:机械工业出版社
作者:(美)Maurice Herlihy
出品人:
页数:383
译者:金海
出版时间:2013-5
价格:69.00
装帧:
isbn号码:9787111418580
丛书系列:计算机科学丛书
图书标签:
  • 并发
  • 多处理器
  • 多线程
  • concurrency
  • 计算机
  • java
  • 计算机科学
  • 操作系统
  • 多处理器编程
  • 并行计算
  • 并发编程
  • 多线程
  • 锁机制
  • 同步技术
  • 分布式系统
  • 高性能计算
  • 软件架构
  • 实时系统
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

工业界称为多核的多处理器机器正迅速地渗入计算的各个领域。多处理器编程要求理解新型计算原理、算法及编程工具,至今很少有人能够精通这门编程艺术。

现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的算法技术。了解本书所涵盖的多处理器编程关键问题将使在校学生以及相关技术人员受益匪浅。

本书特色

本修订版结合2008年第1版出版以来课堂教学和读者反馈的勘误和修改意见,对全书进行了多方面的修订和更新。

循序渐进地讲述共享存储器多线程编程的基础知识。

详细解释当今多处理器硬件对并发程序设计的支持方式。

全面考察主流的并发数据结构及其关键设计要素。

从简单的锁机制到最新的事务内存系统,独立、完整地阐述了同步技术。

给出大量利用Java并发工具包编写的可完全执行的Java实例。

附录提供了采用其他程序设计语言和包(如C#、C及C++的Pthreads库)进行编程的相关背景知识以及硬件基础知识。

作者简介

Maurice Herlihy 哈佛大学的数学学士和麻省理工学院的计算机科学博士,目前为美国布朗大学计算机科学系教授,曾工作于卡内基-梅隆大学和DEC剑桥实验室。他是美国ACM会士,2003年分布式计算领域Dijkstra奖获得者。

Nir Shavit 以色列希伯来大学的计算机科学博士,目前为麻省理工学院电子工程和计算机科学系教授、以色列特拉维夫大学计算机科学系教授。1999~2011年期间,他担任Sun实验室的技术人员。

两位作者在2004年获得了理论计算机领域最高奖——哥德尔奖(G?del Prize),2012年他们共享了分布式计算领域的Edsger W. Dijkstra奖,40多年来他们一起合作,从事并行和分布式计算教学和研发工作。

目录信息

出版者的话
译者序
前言
教学建议
第1章 引言 1
1.1 共享对象和同步 2
1.2 生活实例 4
1.2.1 互斥特性 6
1.2.2 道德 7
1.3 生产者-消费者问题 7
1.4 读者-写者问题 9
1.5 并行的困境 9
1.6 并行程序设计 11
1.7 本章注释 11
1.8 习题 11
第一部分 原 理
第2章 互斥 14
2.1 时间 14
2.2 临界区 14
2.3 双线程解决方案 16
2.3.1 LockOne类 16
2.3.2 LockTwo类 17
2.3.3 Peterson锁 18
2.4 过滤锁 19
2.5 公平性 21
2.6 Bakery算法 21
2.7 有界时间戳 23
2.8 存储单元数量的下界 25
2.9 本章注释 27
2.10 习题 28
第3章 并发对象 31
3.1 并发性与正确性 31
3.2 顺序对象 33
3.3 静态一致性 34
3.4 顺序一致性 35
3.5 可线性化性 38
3.5.1 可线性化点 38
3.5.2 评析 38
3.6 形式化定义 38
3.6.1 可线性化性 39
3.6.2 可线性化性的复合性 40
3.6.3 非阻塞特性 40
3.7 演进条件 41
3.8 Java存储器模型 43
3.8.1 锁和同步块 44
3.8.2 volatile域 44
3.8.3 final域 44
3.9 评析 45
3.10 本章注释 46
3.11 习题 46
第4章 共享存储器基础 50
4.1 寄存器空间 50
4.2 寄存器构造 54
4.2.1 MRSW安全寄存器 55
4.2.2 MRSW规则布尔寄存器 55
4.2.3 M-值MRSW规则寄存器 56
4.2.4 SRSW原子寄存器 57
4.2.5 MRSW原子寄存器 59
4.2.6 MRMW原子寄存器 60
4.3 原子快照 62
4.3.1 无障碍快照 63
4.3.2 无等待快照 64
4.3.3 正确性证明 66
4.4 本章注释 67
4.5 习题 67
第5章 同步原子操作的相对能力 70
5.1 一致数 70
5.2 原子寄存器 72
5.3 一致性协议 74
5.4 FIFO队列 74
5.5 多重赋值对象 77
5.6 读-改-写操作 79
5.7 Common2 RMW操作 80
5.8 compareAndSet()操作 81
5.9 本章注释 82
5.10 习题 83
第6章 一致性的通用性 87
6.1 引言 87
6.2 通用性 88
6.3 一种通用的无锁构造 88
6.4 一种通用的无等待构造 91
6.5 本章注释 95
6.6 习题 95
第二部分 实 践
第7章 自旋锁与争用 98
7.1 实际问题 98
7.2 测试-设置锁 100
7.3 再论基于TAS的自旋锁 102
7.4 指数后退 102
7.5 队列锁 104
7.5.1 基于数组的锁 104
7.5.2 CLH队列锁 106
7.5.3 MCS队列锁 107
7.6 时限队列锁 110
7.7 复合锁 112
7.8 层次锁 118
7.8.1 层次后退锁 118
7.8.2 层次CLH队列锁 119
7.9 由一个锁管理所有的锁 123
7.10 本章注释 123
7.11 习题 124
第8章 管程和阻塞同步 126
8.1 引言 126
8.2 管程锁和条件 126
8.2.1 条件 127
8.2.2 唤醒丢失问题 130
8.3 读者-写者锁 131
8.3.1 简单的读者-写者锁 131
8.3.2 公平的读者-写者锁 132
8.4 我们的可重入锁 134
8.5 信号量 135
8.6 本章注释 136
8.7 习题 136
第9章 链表:锁的作用 139
9.1 引言 139
9.2 基于链表的集合 140
9.3 并发推理 141
9.4 粗粒度同步 142
9.5 细粒度同步 143
9.6 乐观同步 146
9.7 惰性同步 149
9.8 非阻塞同步 153
9.9 讨论 157
9.10 本章注释 157
9.11 习题 158
第10章 并行队列和ABA问题 159
10.1 引言 159
10.2 队列 160
10.3 部分有界队列 160
10.4 完全无界队列 163
10.5 无锁的无界队列 164
10.6 内存回收和ABA问题 166
10.7 双重数据结构 170
10.8 本章注释 172
10.9 习题 172
第11章 并发栈和消除 174
11.1 引言 174
11.2 无锁的无界栈 174
11.3 消除 176
11.4 后退消除栈 176
11.4.1 无锁交换机 177
11.4.2 消除数组 179
11.5 本章注释 181
11.6 习题 181
第12章 计数、排序和分布式协作 184
12.1 引言 184
12.2 共享计数 184
12.3 软件组合 185
12.3.1 概述 185
12.3.2 一个扩展实例 190
12.3.3 性能和健壮性 191
12.4 静态一致池和计数器 192
12.5 计数网 192
12.5.1 可计数网 193
12.5.2 双调计数网 194
12.5.3 性能和流水线 201
12.6 衍射树 201
12.7 并行排序 204
12.8 排序网 204
12.9 样本排序 207
12.10 分布式协作 208
12.11 本章注释 208
12.12 习题 209
第13章 并发哈希和固有并行 212
13.1 引言 212
13.2 封闭地址哈希集 213
13.2.1 粗粒度哈希集 214
13.2.2 空间分带哈希集 215
13.2.3 细粒度哈希集 217
13.3 无锁哈希集 219
13.3.1 递归有序划分 219
13.3.2 BucketList类 222
13.3.3 LockFreeHashSet<T>类 223
13.4 开放地址哈希集 225
13.4.1 Cuckoo哈希 225
13.4.2 并发Cuckoo哈希 226
13.4.3 空间分带的并发Cuckoo哈希 230
13.4.4 细粒度的并发Cuckoo哈希集 231
13.5 本章注释 233
13.6 习题 234
第14章 跳表和平衡查找 235
14.1 引言 235
14.2 顺序跳表 235
14.3 基于锁的并发跳表 236
14.3.1 简介 236
14.3.2 算法 238
14.4 无锁并发跳表 243
14.4.1 简介 243
14.4.2 算法细节 245
14.5 并发跳表 251
14.6 本章注释 251
14.7 习题 251
第15章 优先级队列 253
15.1 引言 253
15.2 基于数组的有界优先级队列 253
15.3 基于树的有界优先级队列 254
15.4 基于堆的无界优先级队列 256
15.4.1 顺序堆 256
15.4.2 并发堆 258
15.5 基于跳表的无界优先级队列 262
15.6 本章注释 264
15.7 习题 265
第16章 异步执行、调度和工作分配 266
16.1 引言 266
16.2 并行分析 271
16.3 多处理器的实际调度 273
16.4 工作分配 274
16.4.1 工作窃取 275
16.4.2 屈从和多道程序设计 275
16.5 工作窃取双端队列 276
16.5.1 有界工作窃取双端队列 276
16.5.2 无界工作窃取双端队列 279
16.5.3 工作平衡 282
16.6 本章注释 283
16.7 习题 284
第17章 障碍 287
17.1 引言 287
17.2 障碍实现 288
17.3 语义换向障碍 288
17.4 组合树障碍 289
17.5 静态树障碍 291
17.6 终止检测障碍 293
17.7 本章注释 295
17.8 习题 296
第18章 事务内存 302
18.1 引言 302
18.1.1 关于锁的问题 302
18.1.2 关于compareAndSet()的问题 303
18.1.3 关于复合性的问题 304
18.1.4 我们能做什么 305
18.2 事务和原子性 305
18.3 软事务内存 306
18.3.1 事务和事务线程 309
18.3.2 僵尸事务和一致性 310
18.3.3 原子对象 311
18.3.4 如何演进 311
18.3.5 争用管理器 312
18.3.6 原子对象的实现 314
18.3.7 无干扰原子对象 315
18.3.8 基于锁的原子对象 318
18.4 硬事务内存 323
18.4.1 缓存一致性 324
18.4.2 事务缓存一致性 324
18.4.3 改进 325
18.5 本章注释 325
18.6 习题 326
第三部分 附 录
附录A 软件基础 328
附录B 硬件基础 340
参考文献 350
索引 359
· · · · · · (收起)

读后感

评分

深入学习一个领域最好的方法就是读这个领域权威人物写的教材,最好是每章后面带有chapter notes的那种,共享内存并发同步领域的The Art of Multiprocessor Programming这本书就是如此,作者M. Herlihy本身就提出了并发同步相关的很多重要理论和方法。全书以一致的风格介绍领域...  

评分

可以更加深入理解操作系统调度和并发等问题,无需深刻的计算理论知识即可读懂。我是在研一花了整整十天看完的!建议后来者多结合图示理解文字算法,不懂再去看代码,这样快一些!前六章的计算理论不分不必追究细节,后面阅读时可以慢慢体会!其实学过操作系统和计算机组成完全...

评分

TL;DR 在看这书之前,我以为这书会讲多核结构啊缓存一致性啊一类的东西,再不济讲一下各种 concurrency model 啥的,结果看完前几章后我又扫了一下目录,这才发现坑爹了。 这书的关键词是锁(locking),是的,你没看错,就是锁,而且还是用户态的锁。 以锁为核心,这书可以分...  

评分

可以更加深入理解操作系统调度和并发等问题,无需深刻的计算理论知识即可读懂。我是在研一花了整整十天看完的!建议后来者多结合图示理解文字算法,不懂再去看代码,这样快一些!前六章的计算理论不分不必追究细节,后面阅读时可以慢慢体会!其实学过操作系统和计算机组成完全...

评分

深入学习一个领域最好的方法就是读这个领域权威人物写的教材,最好是每章后面带有chapter notes的那种,共享内存并发同步领域的The Art of Multiprocessor Programming这本书就是如此,作者M. Herlihy本身就提出了并发同步相关的很多重要理论和方法。全书以一致的风格介绍领域...  

用户评价

评分

这本书的阅读过程,与其说是学习,不如说是一次对自身编程思维的彻底重塑。它没有给我现成的“复制粘贴”的解决方案,而是系统性地解构了并行编程的内在逻辑。令我印象深刻的是关于“并行代码的测试和验证”的章节,这部分内容在很多同类书籍中常常被一笔带过。作者在这里详细阐述了如何利用模型检测和随机测试等高级技术,来系统地覆盖那些难以人为触发的错误路径。这体现了作者对软件质量的极致追求。全书的逻辑推进层层递进,从基础的线程管理,到高级的分布式同步,结构清晰,脉络分明。读完之后,我感觉自己不再是那个被并发问题追着跑的工程师,而是有能力设计并掌控复杂并行流程的架构师。这本书,无疑是近年来技术领域中少有的,能真正提升从业者底层能力和系统设计思维的杰作。

评分

这本书的排版简直是一场视觉享受,大开本的设计让那些复杂的流程图和代码片段得以充分展现,阅读体验极佳。我最欣赏的是作者对“同步原语的权衡”这一主题的细致入微的探讨。市面上的很多书籍只是简单介绍了互斥锁和信号量,但这本书似乎更进一步,它似乎在探讨:在特定的延迟敏感型应用中,我们应该更倾向于无锁数据结构,还是使用更具确定性的同步机制?这种对工具箱内每件工具的深刻理解和适用场景的精准定位,是区分“工具使用者”和“工程大师”的关键。我发现自己开始反思过去某些“想当然”的优化决策,比如,是否因为过度依赖标准库的默认设置,而错失了针对特定硬件的性能潜力。作者似乎在用一种近乎散文的笔触,勾勒出并行编程中那些不易察觉的陷阱,那些在单核世界里绝不会出现的幽灵般的错误。这本书读下来,感觉像是跟随一位经验老到的工匠,学习如何精雕细琢每一个时钟周期,而不是简单地堆砌代码行数。

评分

初读目录时,我曾担心这本书的深度会让我这个有一定经验的开发者感到枯燥,但事实证明我的顾虑是多余的。作者在处理“异构计算”和“内存访问模式优化”时,展现出惊人的洞察力。他似乎能预见到未来几年硬件架构的发展趋势,并提前为我们铺设好了应对复杂性的路径。我尤其欣赏他对“数据局部性”的强调,书中对如何重排数据结构以最大限度利用L1/L2缓存的论述,读来让人茅塞顿开,仿佛打开了一扇通往性能圣殿的大门。这种对底层硬件的敬畏和理解,是编写高效代码的基石。这本书的语言风格非常严谨,但绝不晦涩难懂,它要求读者投入注意力,但每一次投入都会带来丰厚的回报。它更像是一本“武功秘籍”,里面的招式需要勤加练习才能融会贯通,但一旦掌握,就能应对绝大多数复杂的并发挑战。

评分

坦白说,我对技术书籍的期望值通常不高,很多都是概念的堆砌。然而,这本书给我的感觉完全不同,它有一种罕见的“工程务实主义”精神。它没有沉溺于过于理论化的数学证明,而是将重点放在如何构建**健壮且可维护**的并行系统上。我尤其感兴趣的是其中关于“可观测性”和“调试策略”的部分。在多线程环境中,重现一个罕见的竞态条件简直是一场噩梦,书中的调试技巧和工具链的建议,如果真能提高我定位Bug的效率,那这本书的价值就无可估量了。此外,作者对不同并行编程模型(如Actor模型、CSP模型)的对比分析,展现出一种超越单一范式的广阔视野。它没有强迫读者接受某一种“唯一真理”,而是鼓励我们根据项目的特性,做出最恰当的技术选型。这种开放和包容的态度,非常符合现代软件开发的协作精神。它不是一本教你“做什么”的书,而是一本引导你思考“为什么这么做”的书。

评分

拿到这本书的时候,我首先被它深邃的封面设计吸引住了,那种抽象的、流动的线条仿佛在暗示着并行计算的复杂与美感。这本书的装帧很有质感,拿在手里沉甸甸的,让人感觉内容一定非常扎实。我以前对多核架构的理解大多停留在理论层面,知道要提升性能需要分解任务,但真正实践起来,那种竞态条件、死锁的噩梦总是挥之不去。我期望这本书能提供一套清晰、可操作的“心法”,不仅仅是罗列API,而是深入讲解背后的设计哲学。比如,如何在高并发场景下优雅地管理共享资源,如何从一个串行思维者,平滑过渡到真正的并行架构师?我尤其关注其中关于现代处理器缓存一致性模型的章节,因为这往往是性能瓶颈的隐藏元凶。如果这本书能用生动的比喻,将那些晦涩的内存屏障概念解释得如同讲述一个日常故事,那它就真的成功了。我迫不及待地想看看,作者是如何将一个公认的“硬骨头”领域,打磨成可以被初学者也能领会精髓的艺术品的。这本书的气质,是那种沉稳中透露着挑战欲的,仿佛在邀请读者一起攀登技术的高峰。

评分

非常喜欢,注重实际问题,不是仅限于理论,针对性很强,读起来我是觉得挺有趣的

评分

读起来真的是非常的费劲, 说明自己的功力还是不够啊. 觉得 附录中关于硬件系统的描述对自己的启发非常的大. 硬件是软件运行的容器,它的架构必然发限制软件的设计. 但是同时,软件设计的需求也会反过来促进硬件的发展(给硬件提出需求). 再有,所有的引言章节都非常的好. 第一部分的原理,算是给自己补脑洞用的,只能看个热闹.

评分

并发编程入门。。。理清了不少概念,但是感觉用java有点偷懒。。。aba也回避,内存序也回避,让我这个不喜欢java的人有点实践困难

评分

不错的书,主要介绍并发锁的设计,常用数据结构的lockfree算法

评分

非常喜欢,注重实际问题,不是仅限于理论,针对性很强,读起来我是觉得挺有趣的

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有