第六章·高海拔营地:并发编程


第六章 · 高海拔营地:并发编程

章节摘要:翻过类型系统主峰后,路线进入高海拔地段——并发。本章以 Future 与 Promise 为主线讲异步组合,用 Actor 模型讲消息驱动架构,最后收拾并发集合与线程安全的遗留问题。第三章的 Monad 直觉在这里兑现成真实的并行能力。

学习目标

  • 创建、组合 Future,解释 ExecutionContext 这个 given 的角色
  • 用 Promise 桥接回调式 API 与 Future 世界
  • 说出 Actor 模型的状态隔离原理与 Akka/Pekko 的适用场景
  • 识别共享可变状态的典型陷阱并给出集合层面的对策

核心概念速览

金句:Future 是"时间维度上的容器",第六章的 map 与第三章的 map 是同一个 map。

子章节导航

  • 6.1 Future 与 Promise:异步值的组合子全家桶,onComplete、recover、回调桥接。
  • 6.2 Actor 模型与消息驱动:状态私有化消灭锁,Akka 到 Pekko 的谱系。
  • 6.3 并发集合与线程安全:TrieMap、并行集合的能与不能。

子章节之间的逻辑关系

三节对应三种并发需要:算得快(6.1 异步组合)、管得住状态(6.2 消息隔离)、存得安全(6.3 并发集合)。多数业务系统 6.1 为主,6.2 出现在高状态密度场景,6.3 是前两者的公共地基建。

[Future 异步管线] —— 无状态的并行计算 [Actor 消息隔离] —— 有状态的并发协调 [并发集合] —— 两者脚下共享的数据层 ​

前置知识与后续延伸

前置:3.2 的 flatMap(Future 就是 Monad)、5.3 的 given(ExecutionContext)。延伸:7.2 与 Java 线程池互操作、8.1 的 sbt 并行测试。

本章实战主线:温度平台的并发改造

把前面积累的温度分析管线放到并发环境:8 个采集节点各自上报,平台并发拉取、聚合、告警。三步改造:

val nodes = (1 to 8).map(n => s"node-$n") val readings: Future[List[Reading]] = Future.traverse(nodes)(n => fetch(n)) // 并发拉全部节点 val alert = readings.map(_.filter(_.asCelsius > 40)) .map(_.take(3)) alert.foreach(hot => if hot.nonEmpty then notifyOps(hot)) ​

Future.traverse 把"列表逐个做异步"压成一个 Future[List],是并发批处理的黄金组合子;告警链全部用 map/foreach 串联,无一处共享可变状态——本章三节的知识在一个方法里各就各位:traverse 来自 6.1、告警目标可换成 Actor 邮箱(6.2)、聚合若必须就地累积则上 TrieMap(6.3)。

检查点:下撤前自测

  • 能解释 Future 何时开始执行、失败如何传播
  • 能画出"串行 for 推导"与"并行 zip"的耗时差异
  • 能说出并发集合复合操作的原子性边界
    最后一条营地纪律:并发 bug 无法靠测试稳定复现,只能靠结构避免——本章三节给的正是三种"让竞态在结构上无法发生"的形状,写代码时先选形状,再填逻辑。形状清单:无共享状态用 Future 组合、有独占状态用 Actor、有共享快照用 TrieMap,三者之外先怀疑设计。
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U