是否有可能以及如何让Scala par消耗线程池中的线程?

时间:2017-09-25 08:09:24

标签: scala concurrency threadpool thread-local

在Scala 2.11.8中,我使用foreach来并行化大而冗长的DynamicVariable。我还尝试优化代码以避免每次都创建对象的新实例,因此我需要使用par。但是,我注意到仍然创建了这个类的许多实例,这使我认为for (k <- 0 until 5) { // avoid creating instances of PearsonsIncCorr val inc = new DynamicVariable[PearsonsIncCorr](new PearsonsIncCorr) elems.par foreach { pair => // <======= Here I'd like par to consume from a Thread pool inc.withValue(new PearsonsIncCorr) { inc.reset(...) // compute incremental correlation } } } 总是跨越新线程而不是重用它们。那么OP如何从有限的可重用线程池中消耗线程?这有可能吗?

$(".flex-item").click(function () {
  // add class to div while removing it from others with same class
  $(".flex-item").removeClass("expand").addClass("vertical"); //declare the class of the element, remove expand class from all
  $(this).addClass("expand").removeClass("vertical"); //add class to clicked element
  var changebackground = $(this).attr('id'); //get id of clicked element
  $("#vaq-key-features-img").css({
    "background-image": "url({{ '"+changebackground+".jpg' | asset_url }})", 
  }); 
});

1 个答案:

答案 0 :(得分:4)

par有默认的线程池,即scala.concurrent.ExecutionContext.global,此线程池由processors依赖。

因此par并不总是生成 循环的新主题。

如果您需要创建自定义TaskSupport,则可以执行以下操作:

   val pc = mutable.ParArray(1, 2, 3)
   pc.tasksupport = new ForkJoinTaskSupport(
      new java.util.concurrent.ForkJoinPool(2))
   }}}
   pc.foreach(println)