只有 1 个演员的 Akka 并发

Akka concurrency with only 1 actor

如果我只有一个在程序开始时创建的 Akka actor,那么我 tell 该 actor 在单个线程上按顺序处理的每条消息?因此,如果我有多个线程 tell 让那个 actor 执行不同的任务,这与让多个线程在 Java 的 Executor.newSingleThreadExecutor 上排队任务本质上是一样的吗?

Actor 顺序处理消息,并且(至少在 Akka 中)呈现出单线程的错觉(也就是说,在幕后,调度程序可能会在不同的线程上从一条消息到另一条消息执行 Actor 的逻辑,但是从演员的角度来看,只有一个线程)。

如果只有一个参与者,消息处理实际上与在单线程执行器中排队任务是一样的(具有潜在的额外好处,即每个执行的任务可以通过改变参与者的方式来影响后续任务的执行回复消息)。

因此,actor 本身并不是一个有用的抽象;将许多参与者放入一个他们可以协作的系统中,你就会得到一些非常有用和强大的东西。