concurrency - AKKA 如何为单个 Actor 提供并发?

标签 concurrency akka actor

我读过:

Akka ensures that each instance of an actor runs in its own lightweight thread and its messages are processed one at a time.

如果是 AKKA Actor 按顺序处理其消息,那么 AKKA 如何为单个 Actor 提供并发性。

最佳答案

Actor是独立的计算代理,每个Actor都严格按顺序执行,但许多Actor可以同时执行。您可以将 Actor 视为一个线程,它的成本仅为普通线程成本的 0.1% 左右,并且还具有一个可以发送消息的地址——您当然可以在自己的线程中管理队列并将其用于消息传递但您必须自己实现所有这些。

如果 Akka——或者 Actor 模型——停在这里,那么它确实不会很有用。诀窍在于,为 Actor 提供稳定的地址 (ActorRef) 使它们甚至可以跨机器边界、通过网络、在集群中进行通信。它还允许对它们进行原则性故障处理的监督——当正常线程抛出异常时,它只是终止并且不采取任何措施来修复它。

正是这整套封装(通过将所有内容隐藏在 ActorRef 后面来提供)、位置透明的基于消息的通信以及对故障处理的支持,使得 Actor 模型非常适合表达分布式系统。如今,即使是最小的设备中也存在由许多 CPU 核心组成的分布式系统。

关于concurrency - AKKA 如何为单个 Actor 提供并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813677/

相关文章:

scala - Akka Streams 中的 Monadic 短路

algorithm - 如何干净/安全地从异步通信链中删除链接

android - 远程 Actor 在 Android 上不起作用 -> 堆栈溢出

java - 读取新值后读取旧值

c# - C# 中是否有类似 ConcurrentQueue 的数据结构,它允许我等待一个空队列,直到添加一个项目?

scala - Akka 有像 Scala 一样的 react 吗?还是由调度员处理?

scala - Scala 2.9 和 Actors 中的并行集合

java - Brian Goetz 的不当出版

multithreading - F#:在异步返回之前 SwitchToThreadPool 的目的

playframework - Play 2.3 支持 akka 2.3 吗?