原始问题
-
有没有什么情况我们应该避免从类方法返回
Future
?将一种方法未来化的成本是多少? -
如果其他方法返回
Future
怎么办?如果这些方法只执行琐碎的计算以保持接口一致性,我们是否还应该对方法进行未来化?
我想知道未来化一个方法的开销是多少(如果有的话)?
第1版
在Java Runtime的上下文中,在Scala中(如果有的话)将一个方法包装到Future
中的成本/开销是多少?
我想它至少会为GC生成更多的垃圾,但我不确定。
没有必要"未来化"任何东西,除非该方法有异步工作要做,即必须等待未来。如果该方法花费了太多时间,那么调用者总是可以将该调用包装成Future
。因此,我的结论是,在你真正需要Future
之前,不要在你的API中使用它
几乎不存在您可能需要Future
结果但由于开销而应该避免的情况。
在这里描述了整个未来的概念
简而言之,有一个ExecutionContext
,它负责所有开销。它接收小的闭包,并按照自己的意愿运行它们。这样的闭包存在得越多,它就应该处理得越多。
每个操作都会创建新的Promise
,它显示为Future
Every表示每个map
、flatMap
、filter
等等。每个只做像forEach
或onComplete
这样的操作不会创建新的Promise
,而是在ExecutionContext
中注册新的闭包。
所有这些都不是特别重,但如果每个您的方法都将返回一个Future
,这可能是一个问题。
所以,只要遵循合理的极简主义,但如果你需要一些流式计算,通常可以让每一步都异步。