| 
 新書推薦:
 
  《 
			图说航天科学与技术
			》
 售價:HK$ 
			107.8
 
  《 
			北派2:西夏梵音(网络原名《北派盗墓笔记》)
			》
 售價:HK$ 
			52.8
 
  《 
			当代中国经济讲义
			》
 售價:HK$ 
			151.8
 
  《 
			40堂生死课
			》
 售價:HK$ 
			63.8
 
  《 
			日本第一:对美国的启示(看日本系列)
			》
 售價:HK$ 
			61.6
 
  《 
			砂与海之歌纪念画集
			》
 售價:HK$ 
			107.8
 
  《 
			大学问·月照崇徽:章献刘后与宋真仁之际政治
			》
 售價:HK$ 
			107.8
 
  《 
			荆棘里
			》
 售價:HK$ 
			47.1
 
 
 | 
         
          | 內容簡介: |   
          | 本书首先以霍金提出的两个理论物理限制为引子,解释了多核并行计算兴起的原因,并从硬件的角度阐述并行编程的难题。接着,本书以常见的计数器为例,探讨其不同的实现方法及适用场景。在这些实现方法中,除了介绍常见的锁以外,本书还重点介绍了RCU的使用及其原理,以及实现RCU的基础:内存屏障。*后,本书还介绍了并行软件的验证,以及并行实时计算等内容。本书适合于对并行编程有兴趣的大学生、研究生,以及需要对项目进行深度性能优化的软硬件工程师,特别值得一提的是,本书对操作系统内核工程师也很有价值。 |  
         
          | 關於作者: |   
          | Paul是IBM Linux技术中心的杰出工程师,目前专注于高性能、可扩放性、实时响应和能源效率的挑战,在无线电和互联网协议、系统管理、商务应用和实时系统方面有颇多成绩。 谢宝友,毕业于四川省税务学校税收专业,现供职于中兴微电子操作系统团队,对操作系统内核有较强的兴趣。专职于操作系统内核已经有八年时间。目标是利用十年时间,成为一名真正的“内核菜鸟”。个人主页是http:xiebaoyou.blog.chinaunix.net。鲁阳,2009年毕业于成都电子科技大学,曾供职于中兴通讯操作系统部门和腾讯移动浏览器部门,后赴美留学,目前供职于分布式内存数据库(distributedin-memorydatabase)公司VoltDB。8年时间从系统内核做到上层应用,目标是做一名真正的“全栈工程师”。
 |  
         
          | 目錄: |   
          | 目录 第1章如何使用本书1
 1.1路线图1
 1.2小问题2
 1.3 除本书之外的选择3
 1.4示例源代码4
 1.5这本书属于谁4
 第2章简介6
 2.1导致并行编程困难的历史原因6
 2.2并行编程的目标7
 2.2.1性能8
 2.2.2生产率9
 2.2.3通用性9
 2.3并行编程的替代方案11
 2.3.1串行应用的多个实例11
 2.3.2使用现有的并行软件11
 2.3.3性能优化12
 2.4是什么使并行编程变得复杂12
 2.4.1分割任务13
 2.4.2并行访问控制13
 2.4.3资源分割和复制14
 2.4.4与硬件的交互14
 2.4.5组合使用14
 2.4.6语言和环境如何支持这些任务14
 2.5本章的讨论15
 第3章硬件和它的习惯16
 3.1概述16
 3.1.1流水线CPU16
 3.1.2内存引用17
 3.1.3原子操作18
 3.1.4内存屏障19
 3.1.5高速缓存未命中19
 3.1.6IO操作19
 3.2开销20
 3.2.1硬件体系结构20
 3.2.2操作的开销21
 3.3硬件的免费午餐23
 3.3.13D集成23
 3.3.2新材料和新工艺24
 3.3.3是光,不是电子24
 3.3.4专用加速器24
 3.3.5现有的并行软件25
 3.4对软件设计的启示25
 第4章办事的家伙27
 4.1脚本语言27
 4.2POSIX多进程28
 4.2.1POSIX进程创建和销毁28
 4.2.2POSIX线程创建和销毁30
 4.2.3POSIX锁31
 4.2.4POSIX读写锁34
 4.3原子操作37
 4.4Linux内核中类似POSIX的操作38
 4.5如何选择趁手的工具39
 第5章计数40
 5.1为什么并发计数不可小看41
 5.2统计计数器42
 5.2.1设计43
 5.2.2基于数组的实现43
 5.2.3最终结果一致的实现44
 5.2.4基于每线程变量的实现46
 5.2.5本节讨论48
 5.3近似上限计数器48
 5.3.1设计48
 5.3.2简单的上限计数实现50
 5.3.3关于简单上限计数的讨论55
 5.3.4近似上限计数器的实现55
 5.3.5关于近似上限计数器的讨论55
 5.4精确上限计数56
 5.4.1原子上限计数的实现56
 5.4.2关于原子上限计数的讨论62
 5.4.3Signal-Theft上限计数的设计62
 5.4.4Signal-Theft上限计数的实现63
 5.4.5关于Signal-Theft上限计数的讨论68
 5.5特殊场合的并行计数68
 5.6关于并行计数的讨论69
 5.6.1并行计数的性能70
 5.6.2并行计数的专门化71
 5.6.3从并行计数中学到什么71
 第6章对分割和同步的设计73
 6.1分割练习73
 6.1.1哲学家就餐问题73
 6.1.2双端队列75
 6.1.3关于分割问题示例的讨论81
 6.2设计准则82
 6.3同步粒度83
 6.3.1串行程序84
 6.3.2代码锁85
 6.3.3数据锁86
 6.3.4数据所有权88
 6.3.5锁粒度与性能88
 6.4并行快速路径90
 6.4.1读写锁91
 6.4.2层次锁91
 6.4.3资源分配器缓存92
 6.5分割之外97
 6.5.1使用工作队列的迷宫问题并行解法97
 6.5.2另一种迷宫问题的并行解法100
 6.5.3性能比较I102
 6.5.4另一种迷宫问题的串行解法104
 6.5.5性能比较II104
 6.5.6未来展望与本节总结105
 6.6分割、并行化与优化106
 第7章锁107
 7.1努力活着108
 7.1.1死锁108
 7.1.2活锁与饥饿114
 7.1.3不公平的锁116
 7.1.4低效率的锁117
 7.2锁的类型117
 7.2.1互斥锁117
 7.2.2读写锁118
 7.2.3读写锁之外118
 7.2.4范围锁119
 7.3锁在实现中的问题121
 7.3.1基于原子交换的互斥锁实现示例121
 7.3.2互斥锁的其他实现122
 7.4基于锁的存在保证124
 7.5锁:是英雄还是恶棍125
 7.5.1应用程序中的锁:英雄125
 7.5.2并行库中的锁:只是一个工具126
 7.5.3并行化串行库时的锁:恶棍128
 7.6总结130
 第8章数据所有权131
 8.1多进程131
 8.2部分数据所有权和pthread线程库132
 8.3函数输送132
 8.4指派线程132
 8.5私有化133
 8.6数据所有权的其他用途133
 第9章延后处理134
 9.1引用计数134
 9.1.1各种引用计数的实现135
 9.1.2危险指针140
 9.1.3支持引用计数的Linux原语141
 9.1.4计数优化142
 9.2顺序锁142
 9.3读-复制-修改(RCU)145
 9.3.1RCU介绍145
 9.3.2RCU基础147
 9.3.3RCU用法155
 9.3.4Linux内核中的RCU API166
 9.3.5玩具式的RCU实现171
 9.3.6RCU练习188
 9.4如何选择188
 9.5更新端怎么办190
 第10章数据结构191
 10.1从例子入手191
 10.2可分割的数据结构192
 10.2.1哈希表的设计192
 10.2.2哈希表的实现192
 10.2.3哈希表的性能195
 10.3读侧重的数据结构197
 10.3.1受RCU保护的哈希表的实现197
 10.3.2受RCU保护的哈希表的性能199
 10.3.3对受RCU保护的哈希表的讨论201
 10.4不可分割的数据结构201
 10.4.1可扩展哈希表的设计202
 10.4.2可扩展哈希表的实现203
 10.4.3可扩展哈希表的讨论210
 10.4.4其他可扩展的哈希表211
 10.5其他数据结构214
 10.6微优化214
 10.6.1实例化215
 10.6.2比特与字节215
 10.6.3硬件层面的考虑216
 10.7总结217
 第11章验证218
 11.1简介218
 11.1.1BUG来自于何处218
 11.1.2所需的心态220
 11.1.3应该何时开始验证221
 11.1.4开源之路221
 11.2跟踪222
 11.3断言223
 11.4静态分析224
 11.5代码走查224
 11.5.1审查224
 11.5.2走查225
 11.5.3自查225
 11.6几率及海森堡BUG227
 11.6.1离散测试统计228
 11.6.2滥用离散测试统计229
 11.6.3持续测试统计229
 11.6.4定位海森堡BUG232
 11.7性能评估235
 11.7.1性能基准236
 11.7.2剖析236
 11.7.3差分分析237
 11.7.4微基准237
 11.7.5隔离237
 11.7.6检测干扰238
 11.8总结242
 第12章形式验证244
 12.1通用目的的状态空间搜索244
 12.1.1Promela和Spin244
 12.1.2如何使用 Promela249
 12.1.3Promela 示例: 锁251
 12.1.4Promela 示例: QRCU254
 12.1.5Promela初试牛刀:dynticks和可抢占RCU260
 12.1.6验证可抢占RCU和dynticks264
 12.2特定目的的状态空间搜索288
 12.2.1解析Litmus测试289
 12.2.2Litmus测试意味着什么290
 12.2.3运行Litmus测试291
 12.2.4PPCMEM讨论292
 12.3公理方法293
 12.4SAT求解器294
 12.5总结295
 第13章综合应用296
 13.1计数难题296
 13.1.1对更新进行计数296
 13.1.2对查找进行计数296
 13.2使用RCU拯救并行软件性能297
 13.2.1RCU和基于每CPU变量的统计计数297
 13.2.2RCU及可插拔IO设备的计数器300
 13.2.3数组及长度300
 13.2.4相关联的字段301
 13.3散列难题302
 13.3.1相关联的数据元素302
 13.3.2更新友好的哈希表遍历303
 第14章高级同步304
 14.1避免锁304
 14.2内存屏障304
 14.2.1内存序及内存屏障305
 14.2.2如果B在A后面,并且C在B后面,为什么C不在A后面306
 14.2.3变量可以拥有多个值307
 14.2.4能信任什么东西308
 14.2.5锁实现回顾312
 14.2.6一些简单的规则313
 14.2.7抽象内存访问模型314
 14.2.8设备操作315
 14.2.9保证315
 14.2.10什么是内存屏障316
 14.2.11锁约束325
 14.2.12内存屏障示例326
 14.2.13CPU缓存的影响328
 14.2.14哪里需要内存屏障329
 14.3非阻塞同步329
 14.3.1简单NBS330
 14.3.2NBS讨论331
 第15章并行实时计算332
 15.1什么是实时计算332
 15.1.1软实时332
 15.1.2硬实时333
 15.1.3现实世界的实时334
 15.2谁需要实时计算336
 15.3谁需要并行实时计算337
 15.4实现并行实时系统337
 15.4.1实现并行实时操作系统339
 15.4.2实现并行实时应用349
 15.5实时VS.快速:如何选择351
 第16章易于使用353
 16.1简单是什么353
 16.2API设计的Rusty准则353
 16.3修整Mandelbrot集合354
 第17章未来的冲突357
 17.1曾经的CPU技术不代表未来357
 17.1.1单处理器Uber Alles358
 17.1.2多线程Mania359
 17.1.3更多类似的场景359
 17.1.4撞上内存墙359
 17.2事务内存360
 17.2.1外部世界361
 17.2.2进程修改364
 17.2.3同步367
 17.2.4讨论370
 17.3硬件事务内存371
 17.3.1HTM与锁相比的优势372
 17.3.2HTM与锁相比的劣势373
 17.3.3HTM与增强后的锁机制相比的劣势379
 17.3.4HTM最适合的场合380
 17.3.5潜在的搅局者380
 17.3.6结论382
 17.4并行函数式编程383
 附录A重要问题385
 A.1 After的含义是什么385
 A.2 并发和并行之间的差异是什么388
 A.3现在是什么时间389
 附录B同步原语391
 B.1组织和初始化391
 B.1.1smp_init391
 B.2线程创建、销毁及控制392
 B.2.1create_thread392
 B.2.2smp_thread_id392
 B.2.3for_each_thread392
 B.2.4for_each_running_thread392
 B.2.5wait_thread393
 B.2.6wait_all_threads393
 B.2.7用法示例393
 B.3锁394
 B.3.1spin_lock_init394
 B.3.2spin_lock
 |    |