何时应避免在scala中使用Future



原始问题

  1. 有没有什么情况我们应该避免从类方法返回Future?将一种方法未来化的成本是多少?

  2. 如果其他方法返回Future怎么办?如果这些方法只执行琐碎的计算以保持接口一致性,我们是否还应该对方法进行未来化?

我想知道未来化一个方法的开销是多少(如果有的话)?

第1版

在Java Runtime的上下文中,在Scala中(如果有的话)将一个方法包装到Future中的成本/开销是多少?

我想它至少会为GC生成更多的垃圾,但我不确定。

没有必要"未来化"任何东西,除非该方法有异步工作要做,即必须等待未来。如果该方法花费了太多时间,那么调用者总是可以将该调用包装成Future。因此,我的结论是,在你真正需要Future之前,不要在你的API中使用它

几乎不存在您可能需要Future结果但由于开销而应该避免的情况。

在这里描述了整个未来的概念

简而言之,有一个ExecutionContext,它负责所有开销。它接收小的闭包,并按照自己的意愿运行它们。这样的闭包存在得越多,它就应该处理得越多。

每个操作都会创建新的Promise,它显示为FutureEvery表示每个mapflatMapfilter等等。每个只做像forEachonComplete这样的操作不会创建新的Promise,而是在ExecutionContext中注册新的闭包。

所有这些都不是特别重,但如果每个您的方法都将返回一个Future,这可能是一个问题。

所以,只要遵循合理的极简主义,但如果你需要一些流式计算,通常可以让每一步都异步。

最新更新