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

时间:2015-06-27 08:56:47

标签: java akka

说我们有:

  • 包含A,B和C表示的线程1。
  • 包含Actor Y的线程2。
  • 包含Actor Z。
  • 的主题3
  • 演员A和B正在侦听来自演员Y的消息。

然后,演员C向演员Z发出阻止请求。

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

参与者A和B可以在Actor C完成之前收到消息吗?

或者演员C在演员A和B收到消息之前完成必须吗?

  

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

     

所有线程都在不同的物理核心上 - 它们并行运行。

1 个答案:

答案 0 :(得分:2)

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

我认为通过"线程包含演员"你的意思是在一个或几个时刻(消息)中包含。因为调度程序是免费的(默认情况下)为任何actor / mailbox的任何消息选择任何线程。在实践中,它有时可能会选择相同的线程但不总是。

因此,如果一个线程被阻止,调度程序(默认情况下)会转到另一个线程。如果您有足够的帖子,AB可能会在C完成之前收到消息。

然而,对于Akka(Blocking Needs Careful Management)来说,阻止自身是一种不好的做法。

Let it be reactive!