scala 运行
您能说出以下两个之间的区别吗? 如果是,那么您很棒,您无需进一步阅读。
版本1:
val milkFuture = future { getMilk() }
val flourFuture = future { getFlour() }
for {
milk <- milkFuture
flour <- flourFuture
} yield (milk + flour)
版本2:
for {
milk <- future { getMilk() }
flour <- future { getFlour() }
} yield (milk + flour)
如果到了这里,您至少会感到好奇。 不同之处在于,版本1中的两个期货(可能)可以并行运行,而版本2中则不能。 仅在完成getMilk()之后才执行函数getFlour()。
在第一个版本中,会创建两个期货,然后再将其用于理解中。 它们一旦存在,就只取决于它们运行时的执行上下文,但是没有什么阻止它们被执行。 我并不是要说它们肯定是并行运行的,因为它取决于许多因素,例如线程池大小,执行时间等。但是关键是它们可以并行运行。
第二个版本看起来非常相似,但是问题是只有在完成“ getMilk()”将来时才创建“ getFlour()”将来。 因此,无论如何,两个期货永远不能同时运行。 不要忘记,理解只是方法“ map”,“ flatMap”和“ withFilter”的语法糖。 背后没有魔术。
那是所有人。 祝您未来愉快。
翻译自: https://www.javacodegeeks.com/2014/05/scala-for-comprehension-with-concurrently-running-futures.html
scala 运行