Scala并行集合上的哪些操作是并行化的?

时间:2011-10-05 15:37:55

标签: scala collections parallel-processing

似乎当我在并行列表上调用map时,操作并行运行,但是当我在该列表上执行filter时,操作将严格按顺序运行。因此,要使filter平行,我首先映射到(A,布尔值),然后过滤这些元组,然后重新映射所有元组。感觉不太方便。

所以我感兴趣 - 并行集合上的哪些操作是并行化的,哪些不是?

1 个答案:

答案 0 :(得分:11)

没有并行列表。在par上调用List会将List转换为默认的并行不可变序列 - ParVector。该转换顺序进行。 filtermap都应该是平行的。

scala> import scala.collection._
import scala.collection._

scala> List(1, 2, 3).par.filter { x => println(Thread.currentThread); x > 0 }
Thread[ForkJoinPool-1-worker-5,5,main]
Thread[ForkJoinPool-1-worker-3,5,main]
Thread[ForkJoinPool-1-worker-0,5,main]
res0: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(1, 2, 3)

也许你已经得出结论filter不是平行的,因为你已经测量了转换时间和filter时间。

目前尚未并行化的某些操作:sort*变体,indexOfSlice