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中则不能。 函数getFlour()仅在完成getMilk()之后才执行。

在第一个版本中,会创建两个期货,然后再将其用于理解中。 它们一旦存在,则仅取决于它们运行时的执行上下文,但是没有什么阻止它们被执行。 我并不是要说它们肯定是并行运行的,因为它取决于许多因素,例如线程池大小,执行时间等。但是关键是它们可以并行运行。

第二个版本看起来非常相似,但是问题在于,仅在“ getMilk()”将来完成后才创建“ getFlour()”将来。 因此,无论如何,两个期货永远不能同时运行。 不要忘记,理解只是方法“ map”,“ flatMap”和“ withFilter”的语法糖。 背后没有魔力。

那是所有人。 祝您未来愉快。

翻译自: https://www.javacodegeeks.com/2014/05/scala-for-comprehension-with-concurrently-running-futures.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值