user1312837 user1312837 - 3 years ago 380
Scala Question

How to set thread number for the parallel collections?

I can run scala's foreach in parallel like that:

val N = 100
(0 until N).par.foreach(i => {
// do something

But how can I set thread number? I want something like that:

val N = 100
val NThreads = 5
(0 until N).par.foreach(NThreads, i => {
// do something

Answer Source

Every parallel collection keeps a tasksupport object which keeps a reference to thread pool implementation.

So, you can set the parallelism level through that object by changing the reference of tasksupport object to a new thread pool according to your need. eg:

def f(numOfThread: Int, n: Int) = {
 import scala.collection.parallel._
 val coll = (0 to n).par
 coll.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(numOfThreads))
  coll.foreach(i => {
   // do something

f(2, 100)

For more info on configuring parallel collections you can refer

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download