44. 并发模型对比:Actor、CSP 与数据并行
从共享内存并发的困境切入,系统对比 Actor 与 CSP 两大消息传递模型:讲清 Actor 的 mailbox、消息投递语义与 Erlang 监督树,拆解 CSP 的 channel、select 与 Go 调度器,再梳理数据并行(MapReduce、Fork-Join、SIMD)的适用边界,最后给出按通信拓扑与失败模型的选型准则。
tag
从共享内存并发的困境切入,系统对比 Actor 与 CSP 两大消息传递模型:讲清 Actor 的 mailbox、消息投递语义与 Erlang 监督树,拆解 CSP 的 channel、select 与 Go 调度器,再梳理数据并行(MapReduce、Fork-Join、SIMD)的适用边界,最后给出按通信拓扑与失败模型的选型准则。
事件溯源把系统状态定义为事件序列的折叠结果:写模型只追加不可变事件,读模型由投影派生,命令查询职责分离因此成为它的自然搭档。本文讲清持久化 actor 的命令与事件处理模型、日志与快照如何协作、投影与读模型的构建方式、事件版本演进与兼容策略,并给出恢复性能调优与日常运维的实践要点。
Lightbend 从 Akka 2.7 起把许可证换成商业源码许可,生产环境需要付费,Apache Pekko 因此成为 Apache 协议下的事实续作。本文讲清许可证变更的真实影响,逐项给出依赖坐标与包名替换、配置前缀与序列化绑定改写、生态模块对应关系,并讨论按通信边界切分的渐进迁移、集群跨版本不兼容的硬边界,以及灰度发布与回滚方案。补充了迁移验证清单。
深入讲解 Orleans 虚拟 Actor 模型,覆盖 Grain 粒度与单线程语义、状态持久化与 Reminder 提醒机制、集群成员管理与放置策略、Orleans Streams 流式集成,以及它与微服务架构的边界划分、共存形态与选型取舍。
从调度与隔离模型切入 Swift 并发,讲清结构化并发的任务树与 async let、TaskGroup 的并发语义、取消的协作式传播与检查点、Actor 隔离与可重入陷阱、Sendable 检查与 @MainActor 的 UI 更新约束、AsyncStream 背压策略,并给出数据竞争检测与 Swift 6 严格并发的迁移清单。
系统梳理 Combine 的 Publisher/Subscriber/Operator 与常用操作符、AnyCancellable 与 @Published 绑定,以及 async/await 的 Task、async let、TaskGroup、actor、MainActor 与 AsyncSequence,给出互操作桥接、选型取舍与 Swift 6 严格并发下的 Sendable 检查。
深入 Akka 与 Akka Cluster:Actor 系统与 ActorRef、监督与容错、集群成员管理与故障检测、集群分片(Cluster Sharding)、集群单例、分布式数据,以及如何用 Akka 构建可扩展的分布式 Actor 系统。
Scala 是一门融合面向对象与函数式编程的多范式 JVM 语言,由 Martin Odersky 于 2004 年设计。本专题系统覆盖 Scala 函数式编程(不可变/纯函数/高阶函数/Option)、集合库与性能选型、类型系统(泛型/ADT/协变逆变/类型类)、Actor 并发与 Akka 集群(监督/集群分片/容错)、纯函数式效果系统(Cats Effect IO / ZIO)、类型安全数据库访问(Slick/Doobie/Quill)、Web 与 HTTP 服务(Play/akka-http/http4s)、Scala 3 元编程(inline/Match Types/宏)、测试体系(ScalaTest/MUnit/ScalaCheck)与构建工具(sbt/Mill/Scala CLI)、大数据生态(Spark RDD/DataFrame/DAG 优化)以及 Scala 3(Dotty)新特性与迁移,进一步扩展流处理(Akka Streams/fs2/反压)、类型级编程(Shapeless/Match Types/编译期计算)、跨平台(Scala.js/Scala Native/crossProject)、JVM 性能调优(JIT/GC/热点)、领域建模(ADT/opaque type/六边形架构)与微服务实践(拆分/通信/Saga/可观测性),并深入并发与原子性(CAS/无锁/并发集合选型/STM)、函数式错误处理(ADT 错误建模/Either/Validated/Effect 错误通道)、类型安全配置与特性管理(PureConfig/动态配置/Feature Flag 灰度回滚)、日志追踪与可观测性(结构化日志/OpenTelemetry/指标采集/IOLocal 异步贯穿)、序列化与协议设计(Circe/Protobuf/Avro/schema 演进/反序列化安全)以及 Scala 2→3 迁移与重构(交叉编译/scalafix/渐进式迁移/宏重写),并深入 Cats Effect 运行时(Fiber/Ref/Resource/Supervisor)、ZIO 依赖注入与错误通道(ZLayer/Scope/Runtime)、Tagless Final 代数式设计(类型类 DSL/多解释器)、函数式架构(六边形/纯核心与副作用外壳)与 Scala Native + GraalVM AOT 编译部署(C 互操作/Native Image/容器化),并补齐 Akka 到 Apache Pekko 的许可证迁移、Cats Effect 资源管理与生命周期、fs2 流处理与背压、Circe 与 jsoniter-scala 的 JSON 编解码性能、Akka Persistence 事件溯源与 CQRS,以及 Scala CLI 工具链现代化,为 JVM 生态下的函数式、高并发、大数据与工程化开发提供完整指南。
Akka actor 模型是一种强大的并发编程范式,它通过消息传递来实现 actor 之间的通信,避免了传统并发编程中的锁和共享状态的问题。 以下是 Akka actor 编程的一个基本教程。 1. 基础概念 在 Akka 中,一切都是 actor 。 actor 是 Akka 并发模型的基本构建块,它...
Actor模型是一种并发计算的数学模型,最初由Carl Hewitt在1970年代提出,并由William Clinger在其研究生数学工作中进一步发展。这个模型基于一个简单的观点,即自治代理(称为Actor)是并发计算的原始构建块。