理解 Akka Actors 的线程

Dan*_*iel 1 actor akka

我无法理解 Akka 中的 Actor 以及线程与 Actor 的关系。

让我们以 Fridge Actor 和 Person Actor 向 Fridge Actor Reference 发送 GetFoodMessage(s) 为例。假设尊重不变性。

  • 这些消息会在不同的线程中“同时”处理,还是会在队列中一条一条地处理?
  • 线程生成是否完全由库管理并从 Actor 的概念中抽象出来?
  • Actor 引用是 Actor 的实例吗?
  • 当我停止一个演员(和他的孩子)时,我是否杀死了线程?(在冰箱没有更多食物的情况下,通知Person Actor没有更多食物可用)
  • Actor System 是所有这些线程的父进程吗?
  • Fridge Actor 是 Person Actor 的子级吗?

这些问题都是我在“为了好玩”开发 Akka 系统时想到的,我看到其他 Stack Overflow 线程讨论线程与 Actor 的关系,但我相信这些问题是不同的

Ale*_*dov 5

  • 这些消息会在不同线程中“同时”处理还是这些消息会在队列中一一处理?- 在队列中一一处理

  • 线程生成是否完全由库管理并从 Actor 的概念中抽象出来?- 是的

  • Actor 引用是 Actor 的实例吗?- 不。Actor 可以位于另一个 JVM 实例中。

  • 当我停止一个演员(和他的孩子)时,我是否杀死了线程?(如果冰箱没有更多的食物并通知 Person Actor 没有更多的食物) - 否

  • Actor System 是所有这些线程的父进程吗?- 不

  • Fridge Actor 是 Person Actor 的子级吗?- 可以是也可以不是,由程序员决定

一般来说,Akka Actor 是一个能够在线程池的单个线程上运行的任务。当有消息需要处理时,它被提交执行,当没有更多消息时,它离开线程。