11

考虑以下两个陈述:

(a `par` b) `pseq` (a + b)

a `par` (b `pseq` (a + b))

有人可以解释他们的行为有何不同吗?

对于第一个,如果主线程已经完成了计算b,但是spark计算a还没有完成,主线程会继续计算a + b吗?

4

1 回答 1

12

par a b在语义上等价于b,但它暗示a尽早开始评估可能很有用。另一方面,pseq强制评估其第一个参数,但只是其第二个参数中的(惰性)恒等函数。

所以,

(a `par` b) `pseq` (a + b)

在语义上等价于

b `pseq` (a + b)

这相当于

a `par` (b `pseq` (a + b))

因为两者都说“评估b然后成为重击a + b”。鉴于par语言定义中没有其他差异的后果的不精确性。相反,在您的特定编译器/运行时,它们可能会做一些稍微不同的事情。

于 2012-10-12T08:30:16.417 回答