Scala并行集合:如何知道和配置线程数

时间:2016-08-01 14:48:35

标签: multithreading scala parallel-processing

我正在使用scala并行集合。

t(apply(df, 1, function(x) rep(row(as.matrix(x)), x)))
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    3    3    4    5
#[2,]    3    4    4    4    4
#[3,]    1    2    4    4    4

它的速度非常快,但我觉得如果我们跑得太多,我可能会遇到内存不足的问题" largeComputation"并行。

因此,在测试时,我想知道并行集合使用了多少线程,如果需要,我如何配置并行集合的线程数。

1 个答案:

答案 0 :(得分:2)

这是一段scaladoc,他们解释了如何更改任务支持并在其中包裹ForkJoinPool。当您将ForkJoinPool实例化为参数所需的并行度级别时:

Here is a way to change the task support of a parallel collection:

import scala.collection.parallel._
val pc = mutable.ParArray(1, 2, 3)
pc.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(2))

因此,对于您的情况,它将是

val largeList = list.par
largerList.tasksupport = new ForkJoinTaskSupport(
  new scala.concurrent.forkjoin.ForkJoinPool(x)
)
largerList.map(x => largeComputation(x)).toList