何时应避免在 scala 中使用 Future

Qin*_*wei 2 scala future

原始问题

  1. 在什么情况下我们应该避免Future从类方法中返回 a ?未来化方法的成本是多少?

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

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

编辑-1

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

我猜它至少会产生更多的GC垃圾,但我不确定。

0__*_*0__ 5

没有必要“未来化”任何东西,除非该方法有异步工作要做,即必须等待未来。如果该方法花费太多时间,调用者始终可以将调用包装到Future. 因此,我的结论是,除非您真正需要它,否则不要Future在您的 API 中使用它。


Odo*_*ois 5

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

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

简而言之 - 有一个ExecutionContext并且它负责所有开销。它收到一些小的关闭并按照自己喜欢的方式运行它们。存在的此类闭包越多,它应该处理的就越多。

每一个行动都会创造新的东西Promise,并呈现Future给你。every表示每个、、map等等。每个都只是做类似的操作,或者不创建新的,而是在.flatMapfilterforEachonCompletePromiseExecutionContext

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

因此,只需遵循合理的极简主义,但如果您需要一些流计算,通常可以使每个步骤异步。