В чем разница между "Future.successful(None)" и "Future (None)"
Future.apply
запускает асинхронное вычисление, тогда как Future.successful
создает уже завершенное Будущее с указанным результатом.
Теперь Future(None)
(Future.apply(None)
) менее эффективен, чем Future.successful(None)
?
Ответы
Ответ 1
Future.apply(None)
создает асинхронное вычисление и выполняет его. Это означает, что создается дополнительный лямбда-объект и запланирована дополнительная задача (однако, тривиальная задача).
Future.successful(None)
просто производит уже завершенное будущее. Это более эффективно.
Ответ 2
Я не думаю, что Future(None)
дает большие накладные расходы, но при этом по умолчанию реализация каждого вызова apply
порождает новую задачу для пула потоков ForkJoin, тогда как Future.successful(None)
завершается немедленно. И каждый вызов map
или flatMap
в будущем создает новую задачу для опроса, что также дает некоторые накладные расходы, поэтому вы можете взглянуть на реализацию scalaz
Future/Task, которая более тщательно обрабатывает такие детали.