跳至主要內容

actor 并发模型简介与实践

KSJ大约 2 分钟并发actor并发模型erlangrust分布式容错

actor 并发模型

Actor 模型是一种高度面向对象、无锁、异步、天生支持分布式和容错的并发编程范式。它将系统中的每个实体抽象为 Actor,彼此通过消息传递进行通信。

主要特性

  • 更加面向对象:每个 Actor 封装状态和行为,彼此独立。
  • 无锁:避免传统多线程的锁竞争问题。
  • 异步消息传递:Actor 之间通过异步消息通信,天然适合分布式场景。
  • 天生分布式:Actor 可以分布在不同节点,透明通信。
  • 容错(Let it crash):Actor 崩溃后可由监控者自动重启,提升系统健壮性。

劣势

  • 调试和追踪较为复杂,难以全局把控。
  • 消息顺序和一致性需额外关注。
  • 性能受限于消息传递和调度开销。

常见并发模型对比

  • 多线程:共享内存,需加锁,易出错。
  • 协程/异步:轻量级线程,适合 IO 密集型。
  • Actor:消息驱动,天然分布式,适合高并发和容错需求。

典型实现

  • Smalltalk:最早提出面向对象消息传递思想。
  • Objective-C:借鉴 Smalltalk 的消息机制。
  • Erlang:工业级 Actor 模型代表,广泛应用于电信、分布式系统。
  • Rust:如 Actix、riker 等库实现 Actor 并发。

代码示例(Erlang)

% 简单的 echo actor
echo() ->
    receive
        {From, Msg} ->
            io:format("Received: ~p~n", [Msg]),
            From ! {self(), Msg},
            echo()
    end.

Rust 中 Actor 并发模型的实践

Rust 生态中有如 Actix、riker 等高性能 Actor 框架,适合构建高并发、分布式服务。

理论与资料


Actor 模型已成为现代分布式系统和高并发服务的重要基础,适合对高可用、可扩展性有极高要求的场景。