七周七并发模型

七周七并发模型

作者:[美] Paul Butcher

出版社:人民邮电

出版年:2015年8月

评分:7.6

ISBN:9787115386069

所属分类:网络科技

书刊介绍

《七周七并发模型》内容简介

《七周七并发模型》介绍了七种并发模型,行文通俗易懂,有数量充足且设计精良的样例来帮助读者理解。Paul将引领你学习多种非常不同的技术,从一些社交平台使用的Lambda架构,到现在世界上许多**最可靠的电信系统使用的actor模型。你还会学到职业高手使用的编程语言,从Java到Clojure,再到基于Erlang的闪亮新秀Elixir。书中每一章都设计成三天的阅读量。每天阅读结束都会有相关练习,巩固并扩展当天的知识。每一章均有复习,用于概括本章模型的优点和缺陷。
借助Java、Go等多种语言的特长,深度剖析所有主流并发编程模型,基于锁和线程的并发模型是目前最常用的一种并发模型,但是并发编程模型不仅仅只有这一种,本书几乎涵盖了目前所有的并发编程模型。了解和熟悉各种并发编程模型,在解决并发问题时会有更多思路。
——方腾飞,并发编程网站长 当看到这本书的目录时,我就为之一振。它涉及了当今所有的主流并发编程模型(当然也包括Go语言及其实现的CSP模型)。而在品读之后,我更是有一些激动。其中的大部分章节都深入浅出地描述了某一个并发编程模型的概念、特点、机理以及适用领域。加之有大量相应实现语言的示例呈现,更是让这些模型活灵活现、极易理解。另外,各章之间的衔接会使你更容易把这些知识融会贯通。总之,并发编程乃现代编程技能的必备,而这本书则为并发编程的首选佳作。
——郝林(@特价萝卜),《Go并发编程实战》作者 几十年来,专业的程序员一直在用线程与锁模型来进行并行和并发,但这仅仅是《七周七并发模型》介绍的众多模型之一。当今主流语言都竞相支持不同的并发模型,例如CSP模型、数据并行、函数式编程和Clojure的unified succession model。如果你想紧跟时代,我推荐阅读本书。
——Stuart Halloway,Cognitect联合创始人 并发编程近年逐渐热起来,Go等并发语言也对并发编程提供了良好的支持,使得并发这个话题受到越来越多人的关注。本书延续了《七周七语言》的写作风格,通过以下七个精选的模型帮助读者了解并发领域的轮廓:线程与锁,函数式编程,Clojure,actor,通信顺序进程,数据级并行,Lambda架构。书中每一章都设计成三天的阅读量。每天阅读结束都会有相关练习,巩固并扩展当天的知识。每一章均有复习,用于概括本章模型的优点和缺陷。
本书适合所有想了解并发的程序员。
Paul Butcher 资深程序员,涉猎广泛,从单片机编码到高级声明式编程无所不精。Paul是一位少年天才,8岁时就已经开始在8位机上编写游戏。最近几年他开始痴迷于赛车,想要去叫板汉密尔顿。除本书外,还著有在亚马逊获得全五星好评的《软件调试修炼之道》。
黄炎 现供职于上海爱可生,从事数据库高可用软件开发。简介和代码一样简洁。

作品目录

译者序
推荐序
前言
关于本书
本书未涉及的内容
样例代码
给IDE用户的建议
给Windows用户的建议
在线资源
致谢

1、章:概述
1.1、并发还是并行?
一字之差也是差
超越串行编程模型
1.2、并行架构
位级(bit-level)并行
指令级(instruction-level)并行
数据级(data)并行
任务级(task-level)并行
1.3、并发:不只是多核
并发的世界,并发的软件
分布式的世界,分布式的软件
不可预测的世界,容错性强的软件
复杂的世界,简单的软件
1.4、七个模型

2、章:线程与锁
2.1、简单粗暴
2.2、第一天:互斥和内存模型
创建线程
第一把锁
诡异的内存
内存可见性
多把锁
来自外星方法的危害
第一天总结
2.3、第二天:超越内置锁
可中断的锁
超时
交替锁(hand-over-hand
locking)
条件变量
原子变量
第二天总结
2.4、第三天:站在巨人的肩膀上
创建线程之终极版
写入时复制
一个完整的程序
第三天总结
2.5、复习
优点
缺点
不易察觉的错误
其他语言
结语

3、章:函数式编程
3.1、若不爽,就另辟蹊径
3.2、第一天:抛弃可变状态
可变状态的风险
Clojure旋风之旅
第一个函数式程序
轻松并行
Wikipedia词频统计的函数式版本
懒惰一点好
第一天总结
3.3、第二天:函数式并行
每次一页
利用批处理改善性能
化简器
化简器内幕
分而治之
对折叠的支持
用折叠实现词频统计
第二天总结
3.4、第三天:函数式并发
同样的结构,不同的求值顺序
引用透明性
数据流
Future模型
Promise模型
函数式Web服务
第三天总结
3.5、复习
优点
缺点
其他语言
结语

4、章:Clojure之道——分离标识与状态
4.1、混搭的力量
4.2、第一天:原子变量与持久数据结构
原子变量
具有可变状态的多线程Web服务
持久数据结构
标识与状态
重试
校验器
监视器
混搭式Web服务
第一天总结
4.3、第二天:代理和软件事务内存
代理
内存日志系统
软件事务内存
Clojure对共享可变状态的支持
第二天总结
4.4、第三天:深入学习
用STM解决哲学家进餐问题
不用STM解决哲学家进餐问题
原子变量还是STM?
定制并发函数
第三天总结
4.5、复习
优点
缺点
其他语言
结语

5、章:Actor
5.1、更加面向对象
5.2、第一天:消息和信箱
第一个actor
队列式信箱
接收消息
连接到(linking)进程
有状态的actor
用API隐藏消息细节
双向通信
为进程命名
茶歇——函数是第一类对象
并行map函数
第一天总结
5.3、第二天:错误处理和容错性
一个缓存actor
错误检测
管理进程
错误处理内核(error-Kernel)模式
任其崩溃
第二天总结
5.4、第三天:分布式
OTP
分布式词频统计
第三天总结
5.5、复习
优点
缺点
其他语言
结语

6、章:通信顺序进程
6.1、万物皆通信
6.2、第一天:channel和go块
Channel
go块
在channel上进行操作
第一天总结
6.3、第二天:多个channel与IO
处理多个channel
异步轮询
异步IO
第二天总结
6.4、第三天:客户端CSP
并发是一种心境
Hello,
ClojureScript
处理事件
驯服回调
实现一个向导器
第三天总结
6.5、复习
优点
缺点
其他语言
结语

7、章:数据并行
7.1、隐藏在笔记本电脑中的超级计算机
7.2、第一天:GPGPU编程
图形处理与数据并行
第一个OpenCL程序
性能分析
多返回值
错误处理
第一天总结
7.3、第二天:多维空间与工作组
多维工作项空间
查询设备信息
平台模型
内存模型
使用数据并行进行化简操作
第二天总结
7.4、第三天:OpenCL和OpenGL——全部在GPU上运行
水波纹
用OpenGL显示网格
从OpenCL内核访问OpenGL缓存区
仿真水波纹
第三天总结
7.5、复习
优点
缺点
其他语言
结语

8、章:Lambda架构
8.1、并行计算搞定大数据
8.2、第一天:MapReduce
可行性
Hadoop基础
词频统计的Hadoop版本
在Amazon
EMR上运行
处理XML
第一天总结
8.3、第二天:批处理层
传统数据系统的缺陷
永恒的真相
数据还是原始的好
Wikipedia贡献者
完成拼图
第二天总结
8.4、第三天:加速层
设计加速层
Storm系统
容错性
用Storm统计贡献
第三天总结
8.5、复习
优点
缺点
替代方案
结语

9、章:圆满结束
9.1、君欲何往
未来是“不变”的
未来是分布式的
9.2、未尽之路
Fork/Join模型和Work-Stealing算法
数据流
反应型编程
函数式反应型编程
网格计算
元组空间
9.3、越过山丘
参考书目
看完了

热门书摘

并发是同一时间应对(dealing with)多件事情的能力;并行是同一时间动手做(doing)多件事情的能力。

并发编程中如果某事可能会发生,那么不论多艰难它一定会发生,而且可能发生在最不利的时刻

并发是问题域中的概念——程序需要被设计成能够处理多个同时(或者几乎同时)发生的事件;而并行则是方法域中的概念——通过将问题中的多个部分并行执行,来加速解决问题。

线程与锁模型其实是对底层硬件运行过程的形式化

通知调度器:当前线程想要让出对处理器的占用。

Java内存模型定义了何时一个线程对内存的修改对另一个线程可见。基本原则是,如果读线程和写线程不进行同步,就不能保证可见性。

并发程序含有多个逻辑上的独立执行块,它们可以独立地并行执行,也可以串行执行。

现代CPU的并行度很高,其中使用的技术包括流水线、乱序执行和猜测执行等。

对于分布式内存的多处理器系统,每个处理器都有自己的内存,处理器之间的通信主要通过网络进行

但是乱序执行是完全有可能发生的。以下所述均为事实:• 编译器的静态优化可以打乱代码的执行顺序;• JVM的动态优化也会打乱代码的执行顺序;• 硬件可以通过乱序执行来优化其性能。

对于CPU密集型的任务,线程池大小应接近于可用核数;对于IO密集型的任务,线程池可以设置得更大些。

命令式编程的代码由一系列改变全局状态的语句构成,而函数式编程则是将计算过程抽象成表达式求值。

相关推荐

微信二维码