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

标签 scala collections parallel-processing

好像当我调用 map 时在并行列表上,操作并行运行,但是当我这样做时 filter在该列表中,操作严格按顺序运行。所以要制作filter并行,我首先映射到(A,Boolean),然后过滤这些元组,然后再次映射回来。感觉不是很方便。

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

最佳答案

没有平行列表。调用 parList转换 List进入默认的并行不可变序列 - a 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 .

关于scala - Scala 并行集合上的哪些操作是并行化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663903/

相关文章:

scala - Play Framework - 存储有关当前请求的信息

c# - 将 ObservableCollection<T> 转换为 ObservableCollection<String>

c# - 跨多台 PC 并行化我的 C# 程序的最简单方法是什么

erlang - 如何让进程在 Erlang 中并行运行?

scala - 如何在Scala中实现具有多个最大值的maxBy

scala - 为 scala 开发一个 IDE 是个好主意吗?

scala - map 展平和平面 map 不等价

Java - ArrayList 构造函数的线程安全

c# - 将项目添加到 Dictionary<int, List<int>>

c++ - 尝试使用 pthreads 访问共享数据数组时出现错误,无法访问内存地址