Java Akka阻止请求是否阻止其他参与者?

Java Akka阻止请求是否阻止其他参与者?,java,akka,Java,Akka,假设我们有: 包含参与者A、B和C的线程1 线程2包含执行器Y 包含Actor Z的线程3 演员A和B正在监听来自演员Y的消息 参与者C然后向参与者Z发出阻塞请求 在请求返回之前,Actor Y向Actor a和B发送一些消息 参与者A和B能否在参与者C完成之前收到消息? 还是必须由参与者C完成,参与者a和B才能接收消息? 我包括了Actor Y,以允许它在Z处理来自C的请求时发送消息 所有线程都位于不同的物理内核上——它们并行运行 参与者可以在任何线程上处理来自队列的消息-默认情况下,它们

假设我们有:

  • 包含参与者A、B和C的线程1
  • 线程2包含执行器Y
  • 包含Actor Z的线程3
  • 演员A和B正在监听来自演员Y的消息
参与者C然后向参与者Z发出阻塞请求

在请求返回之前,Actor Y向Actor a和B发送一些消息

参与者A和B能否在参与者C完成之前收到消息?

还是必须由参与者C完成,参与者a和B才能接收消息?

我包括了Actor Y,以允许它在Z处理来自C的请求时发送消息

所有线程都位于不同的物理内核上——它们并行运行


参与者可以在任何线程上处理来自队列的消息-默认情况下,它们不会固定到具体线程(如果您不使用固定的调度程序)。简单地说,来自同一队列的不同消息可以在不同的线程上处理(由dispatcher选择)

我想“线程包含actor”是指在一个或多个时刻(消息)中包含。因为dispatcher可以自由(默认情况下)为任何参与者/邮箱的任何消息选择任何线程。在实践中,它有时可能会选择相同的线程,但并不总是如此

因此,如果一个线程被阻塞,dispatcher(默认情况下)将转到另一个线程<如果有足够的线程,代码>A和
B
可能会在
C
完成之前收到消息

然而,对于Akka()来说,阻塞本身是一种不好的做法


为什么要将三个参与者实例固定到一个线程?我甚至不确定这是否可以通过固定的调度程序实现,并且只有在定义一个只有1个线程的基于线程池的调度程序时才能实现。不管怎样,这似乎都不是一个好主意。我希望这是一个学术实验,而不是一个真实的应用程序。也就是说,当你说Actor C向Actor Z发出阻塞请求时,你是什么意思?Actor C实际上有一个对Actor Z的引用(不仅仅是ActorRef),并且直接调用它的方法?你不应该这样使用actors。@Jack Leow我想OP的意思是它只向actor Z发送一条消息,然后
wait.result
等待响应。这仍然是错误的,但没有那么明显