如何在Scala中使用.par控制并行进程数?

Kar*_*rlo 1 parallel-processing scala sbt

我正在使用该par.map表达式在 Scala (SBT) 中并行执行进程。

考虑一下list.par.map(function(_))(我正在准备一份 MWE)。这意味着应该以并行方式function(_)应用于 的所有元素。list在我的示例中,list有 3 个元素。但 Scala 仅并行执行function(list(1))function(list(2))并且仅在之后执行function(list(3))

这种行为有原因吗?与程序在两核处理器上执行有关系吗?或者你如何强制并行执行这三件事?

小智 5

这个问题之前已经被问过:

并且有详细记录:

你想要的是这样的:

var parallelList = list.par
parallelList.tasksupport = new ForkJoinTaskSupport(
     new scala.concurrent.forkjoin.ForkJoinPool(parlevel))
parallelList.map(function(_))
Run Code Online (Sandbox Code Playgroud)

也就是说,如果您在 2 核处理器上运行,则只有两个线程(当然,除非核心是超线程),这意味着您不能同时进行 2 个以上的并行操作。