豆瓣阅读

    七周七并发模型

    阅读
    ¥24.99¥17.49
    图灵计算机互联网好书特价 了解详情
    • 导言
    • 目录
    • 作品信息

    《七周七并发模型》介绍了七种并发模型,行文通俗易懂,有数量充足且设计精良的样例来帮助读者理解。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位机上编写游戏。最近几年他开始痴迷于赛车,想要去叫板汉密尔顿。除本书外,还著有在亚马逊获得全五星好评的《软件调试修炼之道》。

    黄炎 现供职于上海爱可生,从事数据库高可用软件开发。简介和代码一样简洁。

    1. 译者序
    2. 推荐序
    3. 前言
    4. 关于本书
    5. 本书未涉及的内容
    6. 样例代码
    7. 给IDE用户的建议
    8. 给Windows用户的建议
    9. 在线资源
    10. 致谢
    11. 第 1 章 概述
    12. 1.1 并发还是并行?
    13. 一字之差也是差
    14. 超越串行编程模型
    15. 1.2 并行架构
    16. 位级(bit-level)并行
    17. 指令级(instruction-level)并行
    18. 数据级(data)并行
    19. 任务级(task-level)并行
    20. 1.3 并发:不只是多核
    21. 并发的世界,并发的软件
    22. 分布式的世界,分布式的软件
    23. 不可预测的世界,容错性强的软件
    24. 复杂的世界,简单的软件
    25. 1.4 七个模型
    26. 第 2 章 线程与锁
    27. 2.1 简单粗暴
    28. 2.2 第一天:互斥和内存模型
    29. 创建线程
    30. 第一把锁
    31. 诡异的内存
    32. 内存可见性
    33. 多把锁
    34. 来自外星方法的危害
    35. 第一天总结
    36. 2.3 第二天:超越内置锁
    37. 可中断的锁
    38. 超时
    39. 交替锁(hand-over-hand locking)
    40. 条件变量
    41. 原子变量
    42. 第二天总结
    43. 2.4 第三天:站在巨人的肩膀上
    44. 创建线程之终极版
    45. 写入时复制
    46. 一个完整的程序
    47. 第三天总结
    48. 2.5 复习
    49. 优点
    50. 缺点
    51. 不易察觉的错误
    52. 其他语言
    53. 结语
    54. 第 3 章 函数式编程
    55. 3.1 若不爽,就另辟蹊径
    56. 3.2 第一天:抛弃可变状态
    57. 可变状态的风险
    58. Clojure旋风之旅
    59. 第一个函数式程序
    60. 轻松并行
    61. Wikipedia词频统计的函数式版本
    62. 懒惰一点好
    63. 第一天总结
    64. 3.3 第二天:函数式并行
    65. 每次一页
    66. 利用批处理改善性能
    67. 化简器
    68. 化简器内幕
    69. 分而治之
    70. 对折叠的支持
    71. 用折叠实现词频统计
    72. 第二天总结
    73. 3.4 第三天:函数式并发
    74. 同样的结构,不同的求值顺序
    75. 引用透明性
    76. 数据流
    77. Future模型
    78. Promise模型
    79. 函数式Web服务
    80. 第三天总结
    81. 3.5 复习
    82. 优点
    83. 缺点
    84. 其他语言
    85. 结语
    86. 第 4 章 Clojure之道——分离标识与状态
    87. 4.1 混搭的力量
    88. 4.2 第一天:原子变量与持久数据结构
    89. 原子变量
    90. 具有可变状态的多线程Web服务
    91. 持久数据结构
    92. 标识与状态
    93. 重试
    94. 校验器
    95. 监视器
    96. 混搭式Web服务
    97. 第一天总结
    98. 4.3 第二天:代理和软件事务内存
    99. 代理
    100. 内存日志系统
    101. 软件事务内存
    102. Clojure对共享可变状态的支持
    103. 第二天总结
    104. 4.4 第三天:深入学习
    105. 用STM解决哲学家进餐问题
    106. 不用STM解决哲学家进餐问题
    107. 原子变量还是STM?
    108. 定制并发函数
    109. 第三天总结
    110. 4.5 复习
    111. 优点
    112. 缺点
    113. 其他语言
    114. 结语
    115. 第 5 章 Actor
    116. 5.1 更加面向对象
    117. 5.2 第一天:消息和信箱
    118. 第一个actor
    119. 队列式信箱
    120. 接收消息
    121. 连接到(linking)进程
    122. 有状态的actor
    123. 用API隐藏消息细节
    124. 双向通信
    125. 为进程命名
    126. 茶歇——函数是第一类对象
    127. 并行map函数
    128. 第一天总结
    129. 5.3 第二天:错误处理和容错性
    130. 一个缓存actor
    131. 错误检测
    132. 管理进程
    133. 错误处理内核(error-Kernel)模式
    134. 任其崩溃
    135. 第二天总结
    136. 5.4 第三天:分布式
    137. OTP
    138. 分布式词频统计
    139. 第三天总结
    140. 5.5 复习
    141. 优点
    142. 缺点
    143. 其他语言
    144. 结语
    145. 第 6 章 通信顺序进程
    146. 6.1 万物皆通信
    147. 6.2 第一天:channel和go块
    148. Channel
    149. go块
    150. 在channel上进行操作
    151. 第一天总结
    152. 6.3 第二天:多个channel与IO
    153. 处理多个channel
    154. 异步轮询
    155. 异步IO
    156. 第二天总结
    157. 6.4 第三天:客户端CSP
    158. 并发是一种心境
    159. Hello, ClojureScript
    160. 处理事件
    161. 驯服回调
    162. 实现一个向导器
    163. 第三天总结
    164. 6.5 复习
    165. 优点
    166. 缺点
    167. 其他语言
    168. 结语
    169. 第 7 章 数据并行
    170. 7.1 隐藏在笔记本电脑中的超级计算机
    171. 7.2 第一天:GPGPU编程
    172. 图形处理与数据并行
    173. 第一个OpenCL程序
    174. 性能分析
    175. 多返回值
    176. 错误处理
    177. 第一天总结
    178. 7.3 第二天:多维空间与工作组
    179. 多维工作项空间
    180. 查询设备信息
    181. 平台模型
    182. 内存模型
    183. 使用数据并行进行化简操作
    184. 第二天总结
    185. 7.4 第三天:OpenCL和OpenGL——全部在GPU上运行
    186. 水波纹
    187. 用OpenGL显示网格
    188. 从OpenCL内核访问OpenGL缓存区
    189. 仿真水波纹
    190. 第三天总结
    191. 7.5 复习
    192. 优点
    193. 缺点
    194. 其他语言
    195. 结语
    196. 第 8 章 Lambda架构
    197. 8.1 并行计算搞定大数据
    198. 8.2 第一天:MapReduce
    199. 可行性
    200. Hadoop基础
    201. 词频统计的Hadoop版本
    202. 在Amazon EMR上运行
    203. 处理XML
    204. 第一天总结
    205. 8.3 第二天:批处理层
    206. 传统数据系统的缺陷
    207. 永恒的真相
    208. 数据还是原始的好
    209. Wikipedia贡献者
    210. 完成拼图
    211. 第二天总结
    212. 8.4 第三天:加速层
    213. 设计加速层
    214. Storm系统
    215. 容错性
    216. 用Storm统计贡献
    217. 第三天总结
    218. 8.5 复习
    219. 优点
    220. 缺点
    221. 替代方案
    222. 结语
    223. 第 9 章 圆满结束
    224. 9.1 君欲何往
    225. 未来是“不变”的
    226. 未来是分布式的
    227. 9.2 未尽之路
    228. Fork/Join模型和Work-Stealing算法
    229. 数据流
    230. 反应型编程
    231. 函数式反应型编程
    232. 网格计算
    233. 元组空间
    234. 9.3 越过山丘
    235. 参考书目
    236. 看完了

    作者〔美〕Paul Butcher

    译者黄炎

    类别 图书 / 非虚构

    提供方图灵社区

    喜欢这本书的人也喜欢

    来自豆瓣读书的评论1