为什么演员 "ask" 模式被认为是反模式或 "code smell?"
Why is the actor "ask" pattern considered an anti-pattern or "code smell?"
根据我收集到的信息,"ask" 模式被认为是不好的做法,应该避免。相反,推荐的模式是 "actor per request" 模型。然而,这对我来说没有意义,因为 "ask" 模式正是这样做的——它为每个请求创建一个轻量级参与者。那么为什么这被认为是不好的,特别是当期货更可组合并且能够更优雅地处理多个 send/receives?
的排序规则时
来自阿卡 docs:
"There are performance implications of using ask since something needs
to keep track of when it times out, there needs to be something that
bridges a Promise into an ActorRef and it also needs to be reachable
through remoting. So always prefer tell for performance, and only ask
if you must."
但有时您想从演员外部发送消息,在这种情况下您可以使用 ask
。使用 ask
将保证您在指定的超时时间内得到响应,有时这就是您想要的。但是,当您使用 ask
模式时,您应该问自己一个问题,是否可以只使用 Future
s 代替。
有 ask
的位置,但由于上述原因,它的用途应该非常有限。
您不必为每个请求都使用 actor。有些演员注定要长寿,有些则不然。如果参与者执行具有潜在危险或阻塞的操作,您可能希望为每个请求创建一个。适合您的应用程序逻辑的任何内容。
根据我收集到的信息,"ask" 模式被认为是不好的做法,应该避免。相反,推荐的模式是 "actor per request" 模型。然而,这对我来说没有意义,因为 "ask" 模式正是这样做的——它为每个请求创建一个轻量级参与者。那么为什么这被认为是不好的,特别是当期货更可组合并且能够更优雅地处理多个 send/receives?
的排序规则时来自阿卡 docs:
"There are performance implications of using ask since something needs to keep track of when it times out, there needs to be something that bridges a Promise into an ActorRef and it also needs to be reachable through remoting. So always prefer tell for performance, and only ask if you must."
但有时您想从演员外部发送消息,在这种情况下您可以使用 ask
。使用 ask
将保证您在指定的超时时间内得到响应,有时这就是您想要的。但是,当您使用 ask
模式时,您应该问自己一个问题,是否可以只使用 Future
s 代替。
有 ask
的位置,但由于上述原因,它的用途应该非常有限。
您不必为每个请求都使用 actor。有些演员注定要长寿,有些则不然。如果参与者执行具有潜在危险或阻塞的操作,您可能希望为每个请求创建一个。适合您的应用程序逻辑的任何内容。