2013-02-07 136 views
2

以下声明是否正确,否则如何改进?阿卡演员的简单解释

当Akka actor发送消息时,作业被提交给执行者。 当有一个空闲线程时,它会调用获取该演员的 锁定的作业(假设它可以,否则就是另一个作业)。然后调用参与者的 receive方法,一旦完成, 作业将被丢弃并且线程返回到池中。然后循环重复。 与并发线程相关的所有复杂的东西是由Akka处理的 ,释放程序员专注于解决业务问题的 。

+4

这是一个具体实现的描述是Actors,Akka我假设。你应该修改它,并说明你的帖子的标题。如果这不是你的意图,那么你太过于关注所有Actor系统中不存在的实现细节。 –

+1

假设阿卡:我不相信任何演员自己的锁定是牵扯到的。每个参与者实例都有自己的“邮箱”(请求队列 - 术语“作业”未被使用),并且排队的消息一次传递给参与者。任何给定的actor实例一次不会处理多个请求。通常可以有任意数量的给定类型的角色,他们都独立运作。 –

+0

是的,我的意思是阿卡,我已经更新了这个问题。 –

回答

7

更准确的应该是:

当消息被发送到一个演员,它被放置在该演员的队列称为邮箱。同时,可能有成百上千的演员在他们的邮箱中有待处理的消息。 Akka使用有限数量的工作线程,选择这些参与者的子集,并按照时间顺序对来自邮箱的每条消息调用其方法receive

多个线程从不处理同一个actor。此外,Akka可能会决定中断来自邮箱的邮件处理,并选择不同的演员以保持公平并避免饥饿。因为每个receive调用都需要一个线程,所以此方法不应该阻塞,等待或休眠。