2016-08-01 28 views
1

我正在使用scala並行集合。Scala並行集合:如何知道和配置線程數

val largeList = list.par.map(x => largeComputation(x)).toList 

它極快的,但我有,如果我們在並行運行也可能「largeComputation」我可能會遇到內存不足,問題的感覺。

因此,在測試時,我想知道並行集合有多少個線程正在使用和if-need-be,我如何配置並行集合的線程數。

+0

你讀這片[文件](HTTP的://文檔。 scala-lang.org/overviews/parallel-collections/performance)?特別是「收藏應該多大才能平行?」一節。 – hasumedic

+0

我看到了,但我不清楚他們在做什麼。我知道我們需要用ForkJoinTaskSupport做些事情......但究竟是什麼呢? –

回答

2

這是一塊scaladoc,他們在這裏解釋如何更改任務支持並將其包裝在內部ForkJoinPool。當你實例化ForkJoinPool你作爲參數傳遞所需的並行級別:

Here is a way to change the task support of a parallel collection: 

import scala.collection.parallel._ 
val pc = mutable.ParArray(1, 2, 3) 
pc.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(2)) 

因此,對於你的情況下,將

val largeList = list.par 
largerList.tasksupport = new ForkJoinTaskSupport(
    new scala.concurrent.forkjoin.ForkJoinPool(x) 
) 
largerList.map(x => largeComputation(x)).toList 
相關問題