说我们有:
然后,演员C向演员Z发出阻止请求。
在请求返回之前,Actor Y向Actors A和B发送一些消息。
参与者A和B可以在Actor C完成之前收到消息吗?
或者演员C在演员A和B收到消息之前完成必须吗?
我包含了Actor Y,允许它在Z处理来自C的请求时发送消息。
所有线程都在不同的物理核心上 - 它们并行运行。
答案 0 :(得分:2)
Actor可以在任何线程上处理来自队列的消息 - 默认情况下它们不会固定到具体线程(如果您不使用固定调度程序)。简单地说,来自同一队列的不同消息可以在不同的线程上处理(由调度员选择)。
我认为通过"线程包含演员"你的意思是在一个或几个时刻(消息)中包含。因为调度程序是免费的(默认情况下)为任何actor / mailbox的任何消息选择任何线程。在实践中,它有时可能会选择相同的线程但不总是。
因此,如果一个线程被阻止,调度程序(默认情况下)会转到另一个线程。如果您有足够的帖子,A
和B
可能会在C
完成之前收到消息。
然而,对于Akka(Blocking Needs Careful Management)来说,阻止自身是一种不好的做法。