什么时候应该避免在 Scala 中使用 Future
When should avoid usage of Future in scala
原题
有什么情况我们应该避免从 class 方法返回 Future
吗?未来化方法的成本是多少?
如果其他方法返回 Future
,如果这些方法仅执行琐碎的计算以保持接口一致性,我们是否仍应未来化这些方法?
我想知道未来化方法的开销是多少(如果有的话)?
编辑-1
在 Java 运行时的上下文中,在 Scala 中(如果有的话)将方法包装到 Future
中的 cost/overhead 是什么?
我猜它至少会为 GC 产生更多垃圾,但我不确定。
没有必要 'futurise' 除非该方法有异步工作要做,即必须等待期货。如果该方法花费太多时间,调用者总是可以将调用包装成 Future
。因此,我会得出结论,除非你真的需要它,否则不要在你的 API 中使用 Future
。
几乎不存在您可能需要 Future
结果但由于开销而应该避免的情况。
整个未来概念描述here
简而言之 - 有一个 ExecutionContext
,它负责所有开销。它接收小的闭包并且是 运行 它们喜欢的样子。这样的闭包越多,它应该处理的越多。
每个动作都会创建新的 Promise
,显示为 Future
。 Every表示每个map
、flatMap
、filter
等。每个 只是做 操作,如 forEach
或 onComplete
不会创建新的 Promise
而是在 ExecutionContext
.[=25 中注册新的闭包=]
所有这些都不是特别繁重,但是如果 每个 您的方法将返回一个 Future
,这可能是一个问题。
所以只要遵循合理的极简主义,但如果您需要一些流式计算,通常可以让每一步都异步。
原题
有什么情况我们应该避免从 class 方法返回
Future
吗?未来化方法的成本是多少?如果其他方法返回
Future
,如果这些方法仅执行琐碎的计算以保持接口一致性,我们是否仍应未来化这些方法?
我想知道未来化方法的开销是多少(如果有的话)?
编辑-1
在 Java 运行时的上下文中,在 Scala 中(如果有的话)将方法包装到 Future
中的 cost/overhead 是什么?
我猜它至少会为 GC 产生更多垃圾,但我不确定。
没有必要 'futurise' 除非该方法有异步工作要做,即必须等待期货。如果该方法花费太多时间,调用者总是可以将调用包装成 Future
。因此,我会得出结论,除非你真的需要它,否则不要在你的 API 中使用 Future
。
几乎不存在您可能需要 Future
结果但由于开销而应该避免的情况。
整个未来概念描述here
简而言之 - 有一个 ExecutionContext
,它负责所有开销。它接收小的闭包并且是 运行 它们喜欢的样子。这样的闭包越多,它应该处理的越多。
每个动作都会创建新的 Promise
,显示为 Future
。 Every表示每个map
、flatMap
、filter
等。每个 只是做 操作,如 forEach
或 onComplete
不会创建新的 Promise
而是在 ExecutionContext
.[=25 中注册新的闭包=]
所有这些都不是特别繁重,但是如果 每个 您的方法将返回一个 Future
,这可能是一个问题。
所以只要遵循合理的极简主义,但如果您需要一些流式计算,通常可以让每一步都异步。