Akka Actors的简单解释

3
以下陈述正确吗?如果不是,应该如何改进?
当Akka actor收到消息时,作业将提交给执行器。当有空闲线程时,它调用作业并在actor上获取锁(假设可以,否则将采取另一个作业)。然后调用actor的receive方法,一旦完成,作业就被丢弃并将线程返回到池中。然后重复这个过程。所有与并发线程相关的复杂事情都由Akka处理,使程序员可以专注于解决业务问题。

4
这是一个关于Actors实现的描述,我假设它是关于Akka的。你需要修改它并将您的帖子标题相应更改以表明这一点。如果这不是您的意图,则您过于专注于并不适用于所有Actor系统的实现细节。 - Doug Currie
1
假设使用Akka:我不认为涉及对演员本身的任何锁定。每个演员实例都有自己的“邮箱”(一个请求队列,不使用术语“作业”),并且排队的消息会逐个交给演员处理。任何给定的演员实例在同一时间内只处理一个请求。通常可以有任意数量的给定类型的演员,并且它们都是独立运行的。 - Randall Schulz
请查看以下内容:Carl Hewitt解释了计算的Actor模型的本质 - http://en.wikipedia.org/wiki/Actor_model - oluies
是的,我指的是Akka,并且我已经更新了问题。 - John Smith
1
Akka的Actor模型实现确实没有涉及任何锁。 - Roland Kuhn
如果你有20个演员和只有10个线程,那么一些演员将处于等待状态。有些演员可能在邮箱中没有任何消息。每个演员都有机会运行吗?当他们运行时,他们自己检查自己的邮箱吗?这就是为什么不需要锁定的原因吗? - John Smith
1个回答

8
更准确的表述应该是:当一个消息被发送给一个Actor时,它会被放置在这个Actor的队列中,也就是所谓的“邮箱”。同时可能有数百或数千个Actor的邮箱中都有待处理的消息。Akka使用有限数量的工作线程,选择其中的一部分Actor,并按照时间顺序调用它们的receive方法来处理邮箱中的每一条消息。
同一个Actor永远不会被多个线程处理。此外,Akka可能会决定中断处理邮箱中的消息并选择其他Actor以保持公平性和避免饥饿现象。由于每次receive调用都需要一个线程,因此该方法不应该阻塞、等待或休眠。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接