我正在尋找一種方法來設置一勞永逸,當我打電話集合的.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