scala并行集合的并行度

标签 scala scala-collections

scala并行集合中是否有与LINQ的withDegreeOfParallelism等效的东西,它设置将运行查询的线程数?我想并行运行一个操作,该操作需要运行一定数量的线程。

最佳答案

对于最新的主干,使用 JVM 1.6 或更高版本,使用:

collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)

不过,这在未来可能会发生变化。计划在下一个版本中采用更统一的方法来配置所有 Scala 任务并行 API。

但是请注意,虽然这将确定查询使用的处理器数量,但这可能不是运行查询所涉及的实际线程数量。由于并行集合支持嵌套并行性,因此实际线程池实现如果检测到有必要,可能会分配更多线程来运行查询。

编辑:

从 Scala 2.10 开始,设置并行级别的首选方法是将 tasksupport 字段设置为新的 TaskSupport 对象,如下例所示:

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

scala> val pc = mutable.ParArray(1, 2, 3)
pc: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3)

scala> pc.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(2))
pc.tasksupport: scala.collection.parallel.TaskSupport = scala.collection.parallel.ForkJoinTaskSupport@4a5d484a

scala> pc map { _ + 1 }
res0: scala.collection.parallel.mutable.ParArray[Int] = ParArray(2, 3, 4)

在使用 fork join 池实例化 ForkJoinTaskSupport 对象时,必须将 fork join 池的并行级别设置为所需的值(示例中的 2)。

关于scala并行集合的并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424496/

相关文章:

scala - 在 Monad 上实现 `sequence`

Scala 扩展 Map(或 HashMap)并允许映射的构造函数列表

scala - Scala 中带符号参数的隐式函数

scala - 如何从功能上合并列表中重叠的数字范围

scala - ListMap 上的更新方法

scala - 使用 UDF 映射有条件地创建新列时出现 java.io.NotSerializedException : org. apache.spark.sql.Column

scala - Akka HTTP 在 docker 容器中过早关闭

scala - Scala 中基于类型的集合分区

java - 尝试将 java 隐式转换为 scala 集合时出现 NoSuchMethodError

scala - 组合任意长度的多个列表