web-dev-qa-db-ja.com

「Future.successful(None)」と「Future(None)」の違いは何ですか

_Future.apply_は非同期計算を開始しますが、_Future.successful_は指定された結果ですでに完了したFutureを作成します。

Future(None)Future.apply(None))はFuture.successful(None)より効率的ではありませんか?

33
Amir Karimi

Future.apply(None)は非同期計算を作成し、それを実行します。これは、追加のラムダオブジェクトが作成され、追加のタスクがスケジュールされることを意味します(ただし、些細なタスク)。

Future.successful(None)は、すでに完成した未来を生成します。それはより効率的です。

48
i.petruk

Future(None)は大きなオーバーヘッドを与えるとは思いませんが、デフォルトの実装では、applyを呼び出すたびにForkJoinスレッドプールの新しいタスクが生成されますが、Future.successful(None)すぐに完了します。また、将来的にmapまたはflatMapを呼び出すたびに、ポーリングの新しいタスクが作成されます。これにより、オーバーヘッドも発生するため、scalazFutureを確認することをお勧めします。 /このような詳細をより慎重に処理するタスクの実装。

3
4lex1v