为什么演员“问”模式被认为是反模式或“代码味?”

时间:2015-03-04 19:19:59

标签: scala akka actor

从我收集到的内容中,"问"模式被认为是一种不好的做法,应该避免。相反,推荐的模式是每个请求的"演员"模型。然而,这对我来说没有意义,因为"问"模式就是这样 - 它为每个请求创建一个轻量级的actor。那么为什么这会被认为是坏的,特别是当期货更具可组合性并且能够更优雅地处理多个发送/接收的整理时呢?

1 个答案:

答案 0 :(得分:10)

来自Akka docs

  

“因为有需要,使用ask会有性能影响   为了跟踪它何时超时,需要有一些东西   将Promise连接到ActorRef,它也需要可以访问   通过远程处理。所以总是喜欢告诉性能,只询问   如果你必须的话。“

但有时您想从演员外部发送消息,在这种情况下您可以使用ask。使用ask将保证您在指定的超时内得到响应,有时这就是您想要的。但是,当您使用ask模式时,您应该问自己一个问题,即您是否可以使用Future代替。

ask有一个地方,但由于上述原因,它应该使用非常有限。

您不必每个请求都使用actor。有些演员应该是长寿而有些则不是。如果actor执行潜在危险或阻塞操作,您可能希望为每个请求创建一个。无论适合您的应用逻辑。