为什么参与者“询问”模式被视为反模式或“代码味道”?

2024-04-24

据我所知,“询问”模式被认为是一种不好的做法,应该避免。相反,推荐的模式是“每个请求的参与者”模型。然而,这对我来说没有意义,因为“询问”模式正是这样做的——它为每个请求创建一个轻量级参与者。那么为什么这被认为是不好的,特别是当 future 的可组合性要高得多并且能够更优雅地处理多个发送/接收的排序规则时?


来自阿卡docs http://doc.akka.io/docs/akka/snapshot/scala/actors.html:

“使用 Ask 会对性能产生影响,因为有些东西需要 为了跟踪超时时间,需要有一些东西 将 Promise 桥接到 ActorRef 并且它还需要可访问 通过远程处理。所以总是更喜欢告诉性能,并且只询问 如果你必须。”

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

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

您不必根据请求使用 actor。有些演员注定会长寿,有些则不然。如果参与者执行潜在危险或阻塞操作,您可能需要为每个请求创建一个。无论适合您的应用程序逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么参与者“询问”模式被视为反模式或“代码味道”? 的相关文章

随机推荐