2

以下说法是否正确,否则如何改进?

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

4

1 回答 1

8

更准确的是:

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

不止一个线程永远不会处理同一个actor。Akka 也可能决定中断对来自邮箱的消息的处理并选择不同的参与者以保持公平并避免饥饿。因为每次receive调用都需要一个线程,所以此方法永远不应阻塞、等待或休眠。

于 2013-02-07T22:35:55.443 回答