Akka如何决定哪个演员获得线索?

Akka如何决定哪个演员获得线索?,akka,actor,Akka,Actor,假设我们有三个AkkaActors、A、B和C在一个调度程序上运行,只有一个线程,发生以下情况: A接收消息并开始处理它 同时,一条消息被发送到B,同时一条消息被发送到C。由于没有可用的线程s,因此B和C都将这些邮件放入邮箱中 A现在已完成对其邮件的处理,邮箱中不再有邮件,因此将线程释放回池中 B或C现在都需要这个线程。是否有任何保证将首先放在线程上 阿克卡是如何做出这个决定的?它是否对Actor系统中的所有Actor进行循环 这个决定是可配置的吗? 在这些情况下,我可以说优先排序Actor

假设我们有三个Akka
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)。