我正在寻找一种方法来设置一劳永逸,当我打电话集合的.PAR功能是什么游泳池在全球范围内使用...
到目前为止,我只找到了如何设置全局ExecutionContext中的线程数量,而不是如何更改默认使用的实际Pool。
我只是想明确指定ForkJoinPool使并行集合ExecutionContext与我使用的Scala版本无关。
长版 这一要求进来后我们有问题,因为Scala 2.10不支持JDK 1.8
斯卡拉根本不认识的Java版本,并认为我们仍然在1.5,因此该池为不同类型和线程的数目不限于处理器
问题是由这个码引起的数目:
if (scala.util.Properties.isJavaAtLeast("1.6")) new ForkJoinTaskSupport
else new ThreadPoolTaskSupport
def isJavaAtLeast(version: String) = {
val okVersions = version match {
case "1.5" => List("1.5", "1.6", "1.7")
case "1.6" => List("1.6", "1.7")
case "1.7" => List("1.7")
case _ => Nil
}
okVersions exists (javaVersion startsWith _)
}
由于我们如何管理线程在我们的应用程序中非常关键,我们不希望仅仅更改版本就意想不到的惊喜,我想知道是否可以强制Scala使用带有预定数量的线程的ForkJoinPool GLOBALLY(我不希望单实例解决方案在这里描述Scala Parallel Collections: How to know and configure the number of threads)
希望它足够清楚!
“Scala 2.10不支持JDK 1.8” - 呃?它不? (你想2.9?) –
也有你见过https://stackoverflow.com/questions/17865823/how-do-i-set-the-default-number-of-threads-for-scala-2-10 -parallel的集合? –
看起来好像没有很好的解决方案,所以我建议一个更好的方法,只有当你很少调用'par'时,你才可以轻松地跟踪和修改:为可并行化的集合添加你自己的隐式包装类,并添加'customPar'方法将调用'par'并分配一些可以配置的固定'tasksupport'对象。 – SergGr