akka 杀vs.停vs.毒丸?

cvxl0en2  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(108)

Akka的新手问题-我正在阅读Akka要点,有人能解释一下Akka停止/毒丸与杀死之间的区别吗?这本书只提供了一个小的解释“杀死是同步的,毒丸是异步的。”但是以什么方式呢?调用演员线程在这段时间锁定吗?儿童演员在杀死期间被通知了吗,停止后被唤醒了吗,一个概念与另一个概念的使用示例?
非常感谢!

bsxbgnwa

bsxbgnwa1#

stopPoisonPill都将终止执行元并停止消息队列。它们将使执行元停止处理消息,向其所有子代发送停止调用,等待它们终止,然后调用其postStop挂钩。所有后续消息都将发送到死信邮箱。
不同之处在于在这个序列开始之前处理哪些消息。在stop调用的情况下,当前正在处理的消息首先完成,所有其他消息被丢弃。当发送PoisonPill时,这只是队列中的另一个消息,因此序列将在收到PoisonPill时开始,在队列中位于它前面的所有消息都将首先被处理。
相比之下,Kill消息会导致参与者抛出ActorKilledException,并使用正常的管理器机制进行处理。因此此处的行为取决于您在管理器策略中定义的内容。默认情况下是停止参与者。但邮箱会持续存在,因此当参与者重新启动时,除了导致失败的消息之外,它仍会包含旧消息。
另请参见文档中的“阻止演员”、“杀死演员”部分:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
关于监管策略的更多信息:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html

vptzau2j

vptzau2j2#

只要有可能就使用PoisonPill。它会放在邮箱中,像其他邮件一样使用。您也可以在角色中使用“context.stop(self)”。

nhaq1z21

nhaq1z213#

PoisonPill异步停止演员后,它完成了所有的消息收到邮箱,之前PoisonPill。

ukxgm1gy

ukxgm1gy4#

您可以使用actor stop和poison pill来停止对actor的处理,而kill则可以完全终止actor。x.stop是您在akka receive方法中进行的调用,在调用postStop之后,我只会用新的参与者替换参与者状态。x!PoisonPill是一个在参与者运行时传递给参与者以停止处理的方法(建议使用)。也会在呼叫postStop之后取代执行元状态。x.kill会终止执行元,并移除执行元路径中的执行元,并以新的执行元取代整个执行元。

相关问题