Scala并行化方法

时间:2014-08-05 15:43:31

标签: scala

看一下forall方法的实现,这个方法怎么可能是并行的?

  def forall(p: A => Boolean): Boolean = {
    var result = true
    breakable {
      for (x <- this)
        if (!p(x)) { result = false; break }
    }
    result
  }

正如我所理解的更好的并行化,避免使用var并且更喜欢val。如果我使用forall,这现在应该如何工作?

1 个答案:

答案 0 :(得分:2)

您正在查看forall的非并行版本。

并行版本看起来像这样(由并行集合提供,在本例中为ParIterableLike):

def forall(pred: T => Boolean): Boolean = {
  tasksupport.executeAndWaitResult
    (new Forall(pred, splitter assign new DefaultSignalling with VolatileAbort))
}

要获得并行集合,请插入.par,例如:

List.range(1, 10).par.forall(n => n % 2 == 0)

如果您使用像IntelliJ这样的IDE,只需&#34;缩放&#34;进入forall,您将看到上面的代码。否则,这里是ParIterableLike的来源(感谢@Kigyo分享网址)。