演员和邮箱 - 谁传递信息?

时间:2017-04-04 04:36:10

标签: akka actor

我对发送到演员邮箱的邮件有疑问。我知道演员有一个邮箱但不是它的一部分。邮箱由演员系统提供。

问题:

我有一个演员myAct在ID为10. myAct的线程上运行!给另一个演员yourAct的消息。是否有线程10将消息带到yourAct的邮箱,或者ActorSystem是否指定另一个线程将消息传递到邮箱。

2 个答案:

答案 0 :(得分:2)

首先,要删除所有潜在的误导性事实:没有指定负责特定参与者的线程。因此,当你说I have an actor myAct running on thread with id 10时 - 这可能是对的,但只是在那个特定的时间。

Akka官方文档中的片段:

  

幕后花絮Akka将在真实场景中运行多组演员   线程,通常许多actor共享一个线程,后续   一个演员的调用最终可能会被处理   线程。 Akka确保此实现细节不会影响   处理actor状态的单线程

其次,消息传递处理是actor中的两种不同活动,最有可能发生在不同的线程上。

当您向演员发送消息时,您只是将其发送到其ActorRef,然后,它将联系调度员并使用它将消息排队到目标演员的邮箱。因此,从调用者的角度来看,唯一的阻塞就是将消息排入队列。之后,所有额外的工作和处理可能在一个单独的线程上完成。

我希望这很有帮助。

答案 1 :(得分:0)

Akka的dispatchers默认执行程序是fork-join-executor,它使用基于队列的work-stealing算法。因此,我认为在演员的整个生命周期中,某个调度员不会成为某个任务的唯一所有者,我认为没有任何保证。

这个article描述了有关工作线程如何在fork-join框架中共享工作的一些细节。