2016-07-04 6 views
0

何千ものタスクを同時に実行する必要があります。だから私はこの目的のために先物を使うことを考えている。しかし、これらの何千もの作業はすでに未来にあります。将来の未来を使うことは良いことですか?または私はここで何か間違っている。 各タスクは計算に約1 msの時間がかかります。したがって、それらを順番に実行する代わりに、先物で行うことが好ましいと思います。だから、理論的には、タスク全体を完了させるには、およそ1msかその前後のどこかにかかるはずです。しかし、完全な実行には150ミリ秒かかります。それは、すべての並列タスクが個々に取っているものより多くを占めていることを意味します。Scalaの先物先物を使う方法

val start = System.nanoTime() 
+0

それがどのように使われているのかということだけでなく、これが「未来」がモナドとして設計されている理由です。だから私たちは計算を組み立てることができます!やって! –

答えて

0

あなたは、私はあなたが「先物内部先物」と呼んでいるものであり、それが先物を使用するのに最適な慣用的な方法だと思うこれは、それらを構成するために先物にflatMap()機能を使用することができます。

地図は「この未来の結果で、これを引き起こしてください」と表現します。たとえば、getASpecificEndpointInDb().flatMap(endpointURL => doAGetRequest(endpointURL))のような何かを行うことができます。getASpecificEndpointInDb()はFuture [String]を返し、doAGetRequest()はFuture [JsObject]を返します。

質問の2番目の部分に答えるには:コンピュータは、任意の所与の時間に小さな数しか物理的に処理することができない。あなたのマシンに応じて、もしそれが8であれば、理論的に達成できる最良のものは1000/8 = 125msです。しかし、いくつかのコンテキスト切り替えコストがあるので、150msは全く合理的です。そしてそれでも1000msよりもずっと優れています。

+2

あなたが先物を構成したいのであれば、 'map'ではなく' flatMap'を使いたいと思っているでしょう。あなたの例は 'flatMap'を使って正確に要求します。' map'はエラーです。 –

+0

それは本当に、私は編集します:) – C4stor