scala parallel collection使用过多的并行性

时间:2017-05-05 08:38:59

标签: scala parallel-processing

我尝试使用并行集合在Scala中并行执行文件系统操作。我想控制并发操作的数量(例如设置为2):

import scala.collection.parallel.ForkJoinTaskSupport

val filenames = (1 to 50).map(i=> "%03d".format(i)+".dat").par
filenames.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(2))

def doSmth(filename:String) = {
  // simulate expensive FS operation
  new java.io.PrintWriter(s"/home/myuser/$filename") { write("foo"); close }    
  Thread.sleep(2000)
}

filenames.foreach {i => doSmth(i)}

奇怪的是,所有文件都是同时写入的,而不是按预期每2秒写入2个文件。如果我使用new scala.concurrent.forkjoin.ForkJoinPool(1),我会得到预期的行为,但不会出现并行行为> 1

0 个答案:

没有答案