Future.apply
启动异步计算,而Future.successful
使用指定的结果创建已完成的Future。
现在Future(None)
(Future.apply(None)
)效率低于Future.successful(None)
?
答案 0 :(得分:45)
Future.apply(None)
创建异步计算并执行它。这意味着创建了额外的lambda对象并安排了额外的任务(无论多么简单的任务)。
Future.successful(None)
只生产已经完成的未来。效率更高。
答案 1 :(得分:3)
我不认为Future(None)
给出了很大的开销,但仍然在它的默认实现中,每次调用apply
都会为ForkJoin线程池产生一个新任务,而Future.successful(None)
完成立即。并且对未来的每个map
或flatMap
调用都会为轮询创建一个新任务,这也会产生一些开销,因此您可能需要查看scalaz
未来/任务实现更仔细地处理这些细节。