并发的艺术 - (EPUB全文下载)
文件大小:7.91 mb。
文件格式:epub 格式。
书籍内容:
并发的艺术
The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications
[美]布雷谢斯(Breshears, C.) 著
聂雪军 等译
ISBN:978-7-111-30938-3
本书纸版由机械工业出版社于2010年出版,电子版由华章分社(北京华章图文信息有限公司)全球范围内制作与发行。
版权所有,侵权必究
客服热线:+ 86-10-68995265
客服信箱:service@bbbvip.com
官方网址:www.hzmedia.com.cn
新浪微博 @研发书局
腾讯微博 @yanfabook
目 录
O'Reilly Media,Inc.介绍
译者序
前言
为什么要读本书
本书的目标读者
本书的内容
排版约定
联系方法
致谢
第1章 并行让程序运行得更快
你可能会想到的一些问题
哪些人可以称之为线程高手
并行和并发:二者的差异是什么
为什么要了解并发?并发能带来什么
并发编程难不难
线程危不危险
采用线程化方法的4个步骤
第1步分析:找出并发性
第2步设计与实现:采用线程来实现算法
第3步测试正确性:检测并修复在线程化时引入的错误
第4步性能调优:消除性能瓶颈
测试与调优的循环周期
从一开始就采用并发是否可行
并行算法的背景知识
理论模型
分布式内存编程
并行算法简介
共享内存编程与分布式内存编程的比较
共有功能
冗余工作
分解工作
共享数据
工作的静态/动态分配
共享内存模型的特有功能
局部变量与线程局部存储
内存效应
内存中的通信
互斥
生产者/消费者
读/写锁
本书采用的并发编程方法
第2章 是否采用并发
并发算法的设计模型
任务分解
什么是需要计算的任务以及如何定义它们
任务之间存在哪些依赖性以及如何满足这些依赖性
如何将任务分配到线程
示例:数值积分
数据分解
如何将数据分解为数据块
如何确保处理每个数据块的任务在执行更新操作时能够访问到所需要的数据
如何将数据块(和任务)分配到各个线程
示例:有限格网上的生命游戏
并发设计模型起步
哪些算法不能并行
带有状态的算法
递推
归纳变量
归约
循环体间依赖性
一些不太常见的循环体间依赖性
第3章 算法正确性证明与性能衡量
并行算法的验证
示例:临界区问题
第一次尝试
第二次尝试
第三次尝试
第4次尝试
Dekker的算法
第一种情况
第2a种情况:T0是优先线程
第2b种情况:T1是优先线程
第3种情况
是否存在无限延迟的情况
你学到了哪些知识
没有不好的线程,只有编写得不好的线程
性能测试(程序的执行情况如何)
加速比
Amdahl定律
Gustafson-Barsis定律
效率
关于加速比和效率的最后一点提示
硬件并行性的发展历史
第4章 多线程程序设计中的8条简单规则
规则1:找出真正独立的运算
规则2:在尽可能高的层次上实现并发
规则3:尽早考虑通过增加处理器核的数量来获得可伸缩性
规则4:尽可能使用线程安全的库
规则5:使用正确的多线程模型
规则6:永远不要假设程序会按照某种特定的顺序执行
规则7:尽可能使用线程局部存储或者与特定数据相关的锁
规则8:要敢于对代码进行修改以获得更好的并发性
小结
第5章 线程化库
隐式线程化
OpenMP
Intel Threading Building Blocks
显式线程化
Pthreads
Windows Threads
其他主题
特定领域的库
第6章 并行求和与前缀求和
并行求和
基于PRAM模型的算法
一点问题
一种更实用的算法
设计要素权衡
效率
简单性
可移植性
可伸缩性
前缀求和
基于PRAM模型的算法
一种更实用的算法
主线程完成了哪些工作
被创建的计算线程完成了哪些工作
设计要素权衡
效率
简单性
可移植性
可伸缩性
选择
串行算法
并发算法
找出子序列的中值
统计和标记各个区间的元素
ArrayPack()函数
一些设计注意事项
最后的思考
第7章 映射归约
并发映射运算
并发映射运算的实现
并发归约运算
手动编码实现归约算法
栅栏对象的实现
设计要素权衡
效率
简单性
可移植性
可伸缩性
映射归约的应用
友好数值示例小结
映射归约作为一般性并发
第8章 排序
冒泡排序
这种方法是否可行
设计要素权衡
效率
简单性
可移植性
可伸缩性
奇偶换位排序
奇偶换位排序的并发代码
尝试提高并发程度
使线程更长地处于唤醒状态
设计要素权衡
效率
简单性
可移植性
可伸缩性
希尔排序
插入排序简介
串行希尔排序
并发希尔排序
设计要素权衡
效率
简单性
可移植性
可伸缩性
快速排序
递归中的并发性
迭代版本中的并发计算
迭代版本的快速排序
并发的迭代版本
最终的线程化版本
设计要素权衡
效率
简单性
可移植性
可伸缩性
基数排序
基数交换排序
直接基数排序
使用前缀扫描来收集键值
保持数据移动的稳定性
减少数据的访问量
并发的直接基数排序
设计要素权衡
效率
简单性
可移植性
可伸缩性
第9章 搜索
未排序的数据序列
缩短搜索过程
设计要素权衡
效率
简单性
可移植性
可伸缩性
二分搜索
串行版本
并发解决方案
设计要素权衡
效率
简单性
可移植性
可伸缩性
第10章 图算法
深度优先搜索
一种递归解决方案
一种迭代式的解决方案
目前还没有实现并发解决方案
需要多少个锁
对条件表达式求值进行锁定
现在来实现并发解决方案
交替执行分析
创建深度优先搜索的线程
设计要素权衡
效率
简单性
可移植性
可伸缩性
宽度优先搜索
解决问题的关键在于队列
静态图与动态图
最短路径问题
在第K行上将存在怎样的数据竞争
设计要素权衡
效率
简单性
可移植性
可伸缩性
Floyd算法的其他实现方式
最小生成树
Kruskal算法
Prim算法
我们从哪个串行算法开始
并发的Prim算法
设计要素权衡
效率
简单性
可移植性
可伸缩性
第11章 线程化工具
调试器
线程感知的调试器
线程问题调试器:线程检查器
............
书籍插图:
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » 并发的艺术 - (EPUB全文下载)