什么时候应该避免在 Scala 中使用 Future

When should avoid usage of Future in scala

原题

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

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

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

编辑-1

在 Java 运行时的上下文中,在 Scala 中(如果有的话)将方法包装到 Future 中的 cost/overhead 是什么?

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

没有必要 'futurise' 除非该方法有异步工作要做,即必须等待期货。如果该方法花费太多时间,调用者总是可以将调用包装成 Future。因此,我会得出结论,除非你真的需要它,否则不要在你的 API 中使用 Future

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

整个未来概念描述here

简而言之 - 有一个 ExecutionContext,它负责所有开销。它接收小的闭包并且是 运行 它们喜欢的样子。这样的闭包越多,它应该处理的越多。

每个动作都会创建新的 Promise,显示为 FutureEvery表示每个mapflatMapfilter等。每个 只是做 操作,如 forEachonComplete 不会创建新的 Promise 而是在 ExecutionContext.[=25 中注册新的闭包=]

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

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