Подтвердить что ты не робот

В чем разница между "Future.successful(None)" и "Future (None)"

Future.apply запускает асинхронное вычисление, тогда как Future.successful создает уже завершенное Будущее с указанным результатом.

Теперь Future(None) (Future.apply(None)) менее эффективен, чем Future.successful(None)?

4b9b3361

Ответ 1

Future.apply(None) создает асинхронное вычисление и выполняет его. Это означает, что создается дополнительный лямбда-объект и запланирована дополнительная задача (однако, тривиальная задача).

Future.successful(None) просто производит уже завершенное будущее. Это более эффективно.

Ответ 2

Я не думаю, что Future(None) дает большие накладные расходы, но при этом по умолчанию реализация каждого вызова apply порождает новую задачу для пула потоков ForkJoin, тогда как Future.successful(None) завершается немедленно. И каждый вызов map или flatMap в будущем создает новую задачу для опроса, что также дает некоторые накладные расходы, поэтому вы можете взглянуть на реализацию scalaz Future/Task, которая более тщательно обрабатывает такие детали.