具体描述
免费的性能午餐已经结束——Intel、AMD 和Sparc、PowerPC 等主要的处理器生产厂商,从前使用的提高CPU 性能的传统方法已经走到尽头,单核处理器的主频多年来一直踏步不前,当今主流的CPU 制造技术是超线程和多核架构。面对计算机性能的挑战和硬件架构的改变,迷惘的软件开发者们应何去何从?《Scala并发编程》为大家展示了一条光明的康庄大道!《Scala并发编程》由Scala 语言的发明者,瑞士洛桑联邦理工大学教授Martin Odersky 的爱徒Aleksandar Prokopec 博士撰写。作者根据自己在Scala 语言开发团队中的工作经验,全面地介绍了并发编程技术。这些并发编程技术包括:并发程序设计的基础知识和背景知识、常用并发实用组件(如线程池、原子变量和并发集合)的用法、Scala 专用并发框架(Future 和Promise API)的用法、Scala 并行集合框架的用法、使用响应式扩展框架编写基于事件的程序和异步程序的方式、用于编写事务程序的ScalaSTM 库以及Actor 编程模型和Akka框架。作者在《Scala并发编程》中列举的实例既介绍了理论知识又展示了实践方法,同时还能够开拓读者的编程思路。此外,作者还在每章末尾提供了大量编程习题,帮助读者测试和巩固知识。
作者简介
Aleksandar Prokopec 是一位软件开发者,同时也是并发和分布式编程技术研究者。他拥有克罗地亚萨格勒布大学电子工程和计算学院的计算机专业硕士学位和瑞士洛桑联邦理工大学(EPFL)的计算机科学专业博士学位。作为 EPFL 博士助教和 Scala 语言开发团队成员,他积极为 Scala 编程语言做贡献,研究并发编程抽象、并行数据编程支持和 Scala并发数据结构。他编写了 Scala Parallel Collections 框架,这是一个高级的 Scala 并行数据编程库。他还参加了多个 Scala 并发库开发小组,开发了 Future、Promise 和 ScalaSTM 等抽象。
目录信息
1 简介 ........................................................................................................... 1
并发程序设计 .......................................................................................................... 1
传统并发编程技术概述 ............................................................................. 2
现代并发范式 .......................................................................................................... 3
Scala 的优点 ....................................................................... 4
预备知识 ....................................................................................... 5
执行Scala 程序 ......................................................................... 5
Scala 基础知识 ................................................................................................ 6
小结 ...................................................................................................... 11
练习 ........................................................................................ 11
2 JVM 和Java 内存模型中的并发处理方式 ................................................ 13
进程和线程 ...................................................................... 14
创建和启动线程 ....................................................16
原子执行方式 .......................................................21
调整次序 ..................................................................................................25
监控器和同步 ............................................................................................... 27
死锁 .....................................................................................................29
保卫锁 ..........................................................................................................32
中断线程和正常关闭 ...............................................................................................36
Volatile 变量 .................................................................................................. 37
Java 内存模型.............................................................................................. 39
不可变对象和final 字段 .......................................................41
小结 ............................................................. 43
练习 ....................................................................................... 43
3 构建并发程序的传统材料 ............................................. 47
Executor 和ExecutionContext 对象 ................... 48
原子型基元 ...................................................... 52
原子变量 ............................................................................52
无锁编程 ..........................................................55
以明确方式实现锁 ...................................................................57
ABA 问题 .....................................................................59
惰性值 .............................................................................. 61
并发集合 ..................................................................... 66
并发队列 ...............................................................................68
并发集和映射 .....................................................71
并发遍历 .............................................................77
创建和处理进程 ...................................................... 79
小结 ................................................................. 81
练习 ................................................................... 81
4 使用Future 和Promise 对象编写异步程序 .............................................. 85
Future 类 ................................................................................. 86
执行Future 计算....................................................................88
Future 对象的回调函数 ..................................................89
Future 计算和异常 ...............................................92
使用Try 类型 .......................................93
致命异常 ............................................95
Future 对象中的函数组合 ............................................................95
Promise 类 .................................................. 103
转换基于回调函数的API ........................................................... 106
扩展Future API .................................................. 108
取消异步计算操作 ..................................................................................... 109
Future 对象和阻塞操作 ................................................................... 112
等待Future 对象..................................................................................... 112
在异步计算内部执行阻塞操作 ................................................................................... 113
Scala Async 库 ...................................................................... 114
可选的Future 框架 .......................................................................................... 117
小结 ........................................................................................................... 118
练习 ....................................................................................................................... 119
5 数据并行集合 ......................................................................................... 121
Scala 集合概述 ................................................................................................ 122
并行集合的用法 ......................................................................................... 123
并行集合类的层次结构 ....................................................................................... 126
配置并行等级 ...................................................................................................... 128
在JVM 中度量性能 ............................................................................. 129
使用并行集合的注意事项 ................................................................................. 131
非可并行化集合 .................................................................... 131
非可并行化操作 .............................................................................................. 132
并行操作的副作用 .................................................................................................... 134
不确定的并行操作 .................................. 135
可交换和可结合操作符 .............................................................. 137
组合使用并行集合和并发集合 .................................................................... 139
弱一致性迭代器 ........................................................ 140
实现自定义的并行集合 ............................................................................... 141
分离器 ................................................................................................ 142
组合器 ..................................................................................................... 145
可选的数据并行框架 ................................................................. 148
ScalaBlitz 框架中的集合层次结构 .............................................................. 149
小结 ....................................................................................................... 150
练习 ............................................................................................. 151
6 使用Reactive Extensions 编写并发程序 ............................................... 153
创建Observable 对象 ............................................................... 154
Observable 对象和异常 ................................................................ 157
Observable 协定 ................................................................................ 158
实现自定义Observable 对象 ...................................................................................... 160
通过Future 对象创建Observable 对象 ............................................................ 161
Subscription 对象 ............................................................................................ 162
组合Observable 对象 ...................................................................................... 165
嵌套的Observable 对象 ....................................................................................... 166
处理完善Observable 对象失败的情况 .................................................................. 171
Rx 调度器 ............................................................................... 174
使用自定义调度器编写UI 应用程序 .................................................................. 176
Subject 特征和自顶向下的响应式编程 .................................................. 181
小结 ............................................................................................ 186
练习 ..................................................................................... 186
7 基于软件的事务内存 .............................................................................. 189
原子变量带来的麻烦 ...................................................................... 190
使用基于软件的事务内存 .............................................. 194
事务引用 ......................................................... 196
使用atomic 语句 ................................................................ 197
组合事务 .............................................................. 198
事务与副作用 ................................................................. 199
单操作事务 ................................................................. 203
嵌套事务 ........................................................... 205
事务和异常 ...................................................... 208
重新尝试执行事务 ........................................ 212
通过超时设置重新尝试执行事务 ......................................... 216
事务集合 ..................................................................................... 217
事务局部变量 ................................................................. 218
事务数组 ......................................................... 219
事务映射 .............................................................................. 221
小结 ............................................................................................. 222
练习 ............................................................................. 223
8 Actor ...................................................................................................... 227
使用Actor 模型 ............................................................................... 228
创建Actor 系统和Actor 实例 ..................................................................... 230
管理无法正常处理的消息 .................................................................................. 233
Actor 实例的行为和状态 ........................................................................................ 234
Akka 框架中的Actor 层次结构.................................................................................. 239
识别Actor 对象 ............................................................................................... 242
Actor 对象的生命周期 ................................................................................... 245
Actor 对象之间的通信 ...................................................... 249
请求模式 ........................................................ 251
转发模式 ..................................................................... 254
停止Actor 对象 ......................................................................... 255
Actor 监督 .......................................................................... 257
远程Actor 对象 ............................................................. 263
小结 .............................................................................................. 266
练习 ................................................................................................... 267
9 实用并发技术 ......................................................................................... 269
工欲善其事,必先利其器 ....................................................... 269
组合使用多种框架——编写远程文件管理器 ............................................ 273
创建文件系统模型 ........................................................ 274
服务器接口 ......................................................................... 278
客户端导航API.................................................................................. 280
客户端的用户界面 ............................................................................. 284
实现客户端程序的逻辑 .................................................................................. 288
改进远程文件管理器 ........................................................................................ 293
调试并发程序 ................................................................................................................... 294
死锁和暂停处理过程 ............................................................... 295
调试运行结果不正确的程序 ................................................................ 299
性能调试 ............................................................................... 304
小结 .............................................................................................................................. 310
练习 .................................................................................................................................. 311
· · · · · · (收起)
读后感
难点讲的不够浅出,没基础读的比较费劲。翻译不够通顺,凑合看看,掌握些皮毛。 豆瓣pm要不要这么傻啊,限制书评超过50个字,缺心眼。
原书4星,翻译扣2星,送1星 评原书: 部分内容还算有用 总体内容略浅,笔误略多 ——— 评翻译: 译者有没有写过程序? "功能性编程”是什么鬼?原文是什么? “run方法超过负荷后”是什么鬼?原文是什么? “叫名参数”是什么鬼?原文是什么? 大家猜
难点讲的不够浅出,没基础读的比较费劲。翻译不够通顺,凑合看看,掌握些皮毛。 豆瓣pm要不要这么傻啊,限制书评超过50个字,缺心眼。
如果没有对scala和并发非常熟悉,为什么承揽这样一本书的翻译呢?如果对专有名词不确定如何翻译,是否应该提供原词呢?你这样翻译完,对读者是不符责任的,我还得去翻原书用的到底是什么词,才能和正确翻译过来的专有名词对上。
原书4星,翻译扣2星,送1星 评原书: 部分内容还算有用 总体内容略浅,笔误略多 ——— 评翻译: 译者有没有写过程序? "功能性编程”是什么鬼?原文是什么? “run方法超过负荷后”是什么鬼?原文是什么? “叫名参数”是什么鬼?原文是什么? 大家猜
用户评价
老实说,我对并发编程一直都有些畏惧,总觉得它就像一个潘多拉魔盒,一旦打开,就会涌出无数难以理解的概念和难以调试的 Bug。尤其是在 Scala 这种函数式编程语言中,并发又被赋予了新的视角。我特别想了解,Scala 的不可变性在并发编程中扮演了怎样的角色?它如何帮助我们避免许多常见的并发问题,比如竞态条件和死锁?书中是否会详细介绍 Scala 的并发集合,比如 `ConcurrentHashMap` 或者 `TrieMap`,以及它们在多线程环境下的性能表现和使用场景?我希望作者能够用通俗易懂的语言,结合实际案例,来解释这些核心概念。不要上来就堆砌晦涩的术语,而是循序渐进,让读者能够逐步建立起对 Scala 并发编程的理解。我特别期待书中能有关于 `STM`(Software Transactional Memory)的讲解,这是一种非常吸引我的并发控制机制,它声称能够简化并发编程,我很好奇 Scala 是如何实现它的,以及它在实际应用中的优缺点。除了基础知识,我更关心的是如何将这些知识应用于解决实际问题。书中会不会提供一些针对常见并发挑战的解决方案,比如如何实现高效的线程池管理,如何进行分布式并发,或者如何处理并发中的错误和异常?我希望这本书能够提供一些“拿来即用”的模板或者最佳实践,让我能够快速上手,并在自己的项目中应用。
我对 Scala 在 JVM 平台上构建高并发、高可用系统的能力非常看好。我希望这本书能够全面而深入地讲解 Scala 的并发编程特性。它是否会详细介绍 `scala.concurrent` 包下的各种工具和类,比如 `Actor`、`Channel`、`Promise`、`Future` 等?我希望能看到关于如何利用 `Actor` 模型来构建分布式、容错的并发系统的详细指南。书中是否会涉及一些关于“内存模型”的讨论,以及 Scala 如何利用 JVM 的内存模型来保证并发安全?我希望能够理解 `happens-before` 关系在 Scala 并发编程中的意义,以及如何利用它来编写正确高效的代码。另外,对于“并发性能调优”,我希望能在这本书中找到一些实用的建议和技巧。例如,如何选择合适的并发集合?如何避免线程上下文切换的开销?如何进行 CPU 缓存优化?我希望作者能够提供一些基准测试和性能分析的案例,来佐证这些调优技巧的有效性。
一本关于 Scala 并发编程的书,我早就在找了!最近看了不少并发相关的资料,感觉脑子里一团乱麻,各种锁、原子变量、线程池、Actor 模型、响应式流… 听起来都很厉害,但就是串不起来,更别提在实际项目中熟练运用了。市面上讲并发的书不少,但大多偏向 Java,要么就是过于理论化,读完更晕。我希望这本书能给我一种“拨云见日”的感觉,能够清晰地解释 Scala 在并发方面的独特优势,以及如何利用这些特性来构建健壮、高效的并发应用。比如,它能不能深入讲解一下 Scala 的 `Future` 和 `Promise`,以及它们在异步编程中的地位?还有,我一直对 Actor 模型很感兴趣,想知道 Scala 的 Akka 库是如何实现 Actor 的,它的消息传递机制有什么特别之处?我希望这本书能提供大量的代码示例,而且是那种可以直接复制粘贴到 IDE 里运行,并且能看到实际效果的。不仅仅是“知其然”,更希望“知其所以然”,理解背后的原理,这样才能举一反三,应对各种复杂的并发场景。另外,书中会不会涉及一些高阶的并发模式,比如 Lamport 时间戳、向量时钟,或者像 TLA+ 这样的形式化验证方法?虽然这些可能对初学者来说有点难度,但对于想要深入研究并发的读者来说,绝对是干货。我对这本书的期望很高,希望它能成为我深入理解和实践 Scala 并发编程的绝佳助手,让我能够自信地驾驭并发世界的复杂性,开发出高性能、高可靠性的应用程序。
函数式编程与并发编程的结合,一直是我非常感兴趣的研究方向。Scala 作为一门优秀的函数式编程语言,在并发领域有着得天独厚的优势。我希望这本书能够充分发挥 Scala 在函数式编程方面的特点,来讲解并发编程。它是否会深入探讨 `Immutable Data Structures` 在并发安全中的关键作用?如何利用 `map`、`filter`、`reduce` 等高阶函数来处理并发数据流?我特别期待书中能够有关于 `Stream Processing` 和 `Reactive Programming` 的内容,比如 `Akka Streams` 或者 `fs2` 这样的库。我希望能了解它们是如何实现高效的、可伸缩的事件驱动架构的。书中是否会涉及一些关于“并发模式”的介绍,比如“生产者-消费者模式”、“发布-订阅模式”、“Fence Pattern”等,以及如何在 Scala 中用函数式的方式来实现它们?我希望能够学到如何利用 Scala 的函数式抽象来构建清晰、简洁、易于维护的并发代码,而不是陷入到繁琐的同步原语中。
我一直对并发编程感到既着迷又有些畏惧。Scala 提供的强大并发抽象,比如 `Future` 和 `Promise`,以及 Akka 这样的框架,让我对在 Scala 中构建高并发应用充满了期待。我希望这本书能够从最基础的概念讲起,逐步深入到更复杂的场景。例如,它是否会详细解释线程的生命周期、进程与线程的区别,以及如何在 Scala 中创建和管理线程?我特别想了解 Scala 的 `ExecutorService` 是如何工作的,以及如何对其进行调优以获得最佳性能。书中会不会涉及一些关于“并发调试”的技巧和工具?并发 Bug 往往难以复现和定位,我希望能够学习到一些有效的调试方法,比如利用日志、断点或者专门的调试工具。另外,对于“并发安全”的讨论,我希望能看到书中对各种并发安全问题的深入剖析,例如竞态条件、死锁、活锁、饥饿等,以及 Scala 提供的解决方案,比如原子操作、锁、信号量等。我希望书中能有大量的图示和示意图,来帮助我理解抽象的概念,让学习过程更加直观和生动。
Scala 的并发编程,对我来说一直是一个充满吸引力但又略显神秘的领域。我非常期待能有一本高质量的书籍,能够系统地梳理 Scala 的并发特性,并提供详实的讲解。我希望书中能够清晰地解释 `Future` 和 `Promise` 的概念,以及它们在异步编程中的实际应用。例如,如何使用 `map`、`flatMap`、`recover` 等方法来处理和转换异步结果?我希望书中能有关于如何构建健壮的错误处理机制的指导,以应对并发操作中可能出现的各种异常。另外,对于 `Actor` 模型,我希望能在这本书中得到深入的理解。它是否会详细介绍 `Akka` 的 Actor 系统,包括 Actor 的生命周期、消息传递机制、以及如何构建容错的分布式 Actor 系统?我希望能够理解 Actor 如何通过消息传递来避免共享状态,从而简化并发编程。此外,书中是否会涉及一些关于“并发性能分析”和“性能优化”的内容?我希望能够学习到如何识别并发瓶颈,并采取有效的措施来提升程序的性能。我希望这本书能够提供大量真实世界的案例和代码示例,让我在学习过程中能够理论联系实际,并最终能够熟练地运用 Scala 构建高效、可靠的并发应用程序。
我对 Scala 在处理高并发场景下的强大能力一直充满好奇。我希望能通过这本书,系统地学习 Scala 的并发编程模型,并掌握实际应用中的最佳实践。书中是否会深入讲解 `Akka` 框架的 Actor 模型,包括 Actor 的创建、消息传递、状态管理、监督策略等?我希望能够理解 Akka 如何通过 Actor 的隔离性来避免共享状态带来的并发问题。另外,对于“响应式编程”(Reactive Programming),我希望这本书能够有详细的介绍。它是否会讲解 `ReactiveX`(RxJava、RxScala)或者 `Akka Streams` 等库,以及它们在构建事件驱动、非阻塞的并发应用中的作用?我希望能够学习如何利用这些库来处理复杂的异步数据流,并实现高效的资源管理。书中是否会包含一些关于“并发设计模式”的讨论,比如“读写锁”、“信号量”、“CountDownLatch”等,以及如何在 Scala 中以函数式的方式来实现它们?我希望这本书能够成为我构建高性能、可伸缩、容错的 Scala 并发应用的宝典。
我对函数式编程在并发场景下的应用情有独钟,而 Scala 正是这一领域的佼佼者。我希望这本书能够深入挖掘 Scala 在函数式编程范式下,如何优雅地处理并发问题。例如,它是否会详细讲解 `monad`(尤其是 `IO` monad)在并发编程中的作用?如何利用 `flatMap` 和 `sequence` 来组合和管理异步操作?我对 `ZIO` 或 `Cats Effect` 这样能够提供强大并发抽象的库很感兴趣,希望书中能够有所涉及,并提供实际的示例代码,展示如何利用它们来构建高层次的并发应用。书中会不会讨论如何进行并发程序的单元测试和集成测试?这是一个常常被忽视但至关重要的环节,我希望能够学习到一些有效的测试策略和工具。此外,对于像“事件溯源”(Event Sourcing)和“CQRS”(Command Query Responsibility Segregation)这样与并发和状态管理紧密相关的架构模式,书中是否会有介绍和讨论?我渴望了解这些模式如何在 Scala 的并发生态系统中落地,以及如何利用 Scala 的特性来简化它们的实现。我希望这本书不仅能让我理解并发的概念,更能让我掌握在 Scala 中构建复杂、可维护、高性能并发系统的能力,成为一名真正的并发编程专家。
作为一名 Scala 开发者,我一直对如何编写高效、安全的并发代码感到好奇。市面上的并发书籍大多侧重于 Java,而我更希望能找到一本专门针对 Scala 语言特性的并发指南。我期待这本书能够详细介绍 Scala 的 `Promise` 和 `Future` 的工作原理,以及它们在处理异步操作和结果聚合中的应用。书中是否会提供关于如何合理地管理 `ExecutionContext` 的建议,以及如何避免常见的 `Future` 滥用问题?我特别关心书中关于“无锁数据结构”(Lock-Free Data Structures)的介绍。我听说 Scala 在这方面有着不错的支持,比如 `ConcurrentRef`。我希望作者能够解释这些数据结构的原理,以及它们在特定场景下相比于传统锁的优势。另外,对于“分布式并发”,我希望能在这本书中找到一些线索。它是否会涉及像 `Akka Cluster` 这样能够实现跨节点并发通信的框架?或者,是否会讨论一些用于构建分布式系统的通用并发模式,例如“拜占庭容错”或者“共识算法”?我希望书中能够包含大量的代码片段,能够清晰地展示各种并发原语和模式的用法,并且对这些代码进行详细的解释,让我能够理解背后的逻辑。
我一直认为,学习一门新的编程语言,除了掌握基础语法和常用库之外,深入理解其在并发处理方面的能力,是成为一名优秀开发者的必经之路。Scala 凭借其函数式特性和 JVM 平台,在并发编程领域有着独特的优势,而我急切地想通过这本书来系统地学习和掌握这些精髓。我对书中关于“并行计算”与“并发计算”的区分和联系很感兴趣,希望它能清晰地阐述两者的区别,以及如何在 Scala 中有效地利用多核处理器来实现并行化。比如,`parallel collections` 的强大功能,是否会在书中得到深入的剖析?我希望看到它与传统 `for` 循环的性能对比,以及在不同数据结构下的应用案例。另外,对于 `Akka` 框架,我一直有所耳闻,但从未深入接触。书中是否会从 Akka 的核心概念——Actor、消息传递、监督策略等方面,进行详尽的介绍?我希望能理解 Actor 的生命周期管理,以及如何构建容错和可伸缩的分布式系统。我特别想知道,Akka 的 `Cluster` 和 `Sharding` 功能是如何实现的,以及它们在处理大规模并发场景时的优势。当然,并发编程离不开对“状态管理”的思考。书中是否会探讨如何在 Scala 中安全有效地管理共享状态,比如通过 `Ref`, `Agent` 或者 `Cell` 等并发原语?我希望作者能够提供一些关于如何设计并发友好的数据结构和算法的指导。
该提到的都提到了。。。
这翻译太糟糕了, 很多句子读着费劲。术语译法也不标准, 甚至前后都不一致。
知识好,翻译差
该提到的都提到了。。。
知识好,翻译差