好像在我调用的时候 map
在并行列表中,操作并行运行,但是当我这样做时 filter
在该列表中,操作严格按顺序运行。所以要做 filter
并行,我首先映射到(A,布尔),然后过滤那些元组,并再次映射所有元组。感觉不太方便。
所以我感兴趣 - 并行集合上的哪些操作是并行化的,哪些不是?
好像在我调用的时候 map
在并行列表中,操作并行运行,但是当我这样做时 filter
在该列表中,操作严格按顺序运行。所以要做 filter
并行,我首先映射到(A,布尔),然后过滤那些元组,并再次映射所有元组。感觉不太方便。
所以我感兴趣 - 并行集合上的哪些操作是并行化的,哪些不是?
没有并行列表。调用 par
在...上 List
转换 List
进入默认的并行不可变序列 - a ParVector
。该转换顺序进行。这俩 filter
和 map
应该是平行的。
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
。