Akka如何决定哪个演员获得线索?
假设我们有三个AkkaAkka如何决定哪个演员获得线索?,akka,actor,Akka,Actor,假设我们有三个AkkaActors、A、B和C在一个调度程序上运行,只有一个线程,发生以下情况: A接收消息并开始处理它 同时,一条消息被发送到B,同时一条消息被发送到C。由于没有可用的线程s,因此B和C都将这些邮件放入邮箱中 A现在已完成对其邮件的处理,邮箱中不再有邮件,因此将线程释放回池中 B或C现在都需要这个线程。是否有任何保证将首先放在线程上 阿克卡是如何做出这个决定的?它是否对Actor系统中的所有Actor进行循环 这个决定是可配置的吗? 在这些情况下,我可以说优先排序Actor
Actor
s、A
、B
和C
在一个调度程序上运行,只有一个线程
,发生以下情况:
A
接收消息并开始处理它B
,同时一条消息被发送到C
。由于没有可用的线程
s,因此B
和C
都将这些邮件放入邮箱中A
现在已完成对其邮件的处理,邮箱中不再有邮件,因此将线程
释放回池中B
或C
现在都需要这个线程
。是否有任何保证将首先放在线程上- 阿克卡是如何做出这个决定的?它是否对
Actor系统中的所有
进行循环Actor
- 这个决定是可配置的吗?
- 在这些情况下,我可以说优先排序
Actor
以在C
Actor
之前获取线程吗李>B
- 在这些情况下,我可以说优先排序
使用Akka的全部原因是不必处理这类事情。您不希望(或不需要)以这样的方式对参与者进行优先级排序。内部调度程序逻辑非常复杂,并且经过了很好的优化,可以尽可能快地处理任务。优先级排序应该通过其他方式完成,如路由器或优先级邮箱
现在回答您的问题:默认的调度程序由阻塞队列支持-首先选择在邮箱中第一次收到消息的参与者。Akka参与者不会使用处于“等待处理消息”状态的线程。当Actor接收到消息时,它应该选择线程(当然,吞吐量和吞吐量deadlinetime也可能很重要)。因此,收到一条消息-拿起一条线。AFAIK此决定不可配置。请编辑问题以澄清。两名演员等待接收消息。两者都需要一个线程,但只有一个可用。哪一个来接线?假设dispatcher.Throughts配置为1,dispatcher.Throughts-deadline-time配置为0毫秒。如果两个邮箱都为空,则将由首先接收消息的参与者(由dispatcher提供)拾取消息。如果两个邮箱都不为空-参与者将根据吞吐量和吞吐量截止时间(Dispatcher提供给他们)拾取线程进程-在您的示例中,每个参与者应处理一条消息,然后线程应传递给另一个参与者(如果另一个参与者有消息要处理)。是,但这并不能回答我的问题。如果两个
Actor
需要一个线程,因为他们的邮箱中有邮件,但只有一个线程可用,那么Akka必须决定哪个Actor
将首先获得该线程。我的问题是这个决定的依据是什么?:)如果两个参与者的邮箱中都有一条消息,那么一个线程应该已经很忙了——由他们中的一个来处理消息(谁先接收消息,谁先接收线程)。在这之后,参与者应该在每个线程获取时恰好处理1条消息(基于吞吐量=1)。