2016-08-01 2 views
1

Я использую параллельные коллекции scala.Scala Parallel Collections: Как узнать и настроить количество потоков

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

Он молниеносно, но у меня есть ощущение, что я может столкнуться с проблемами, вышедшими из памяти, если мы запустим тоже может «largeComputation» параллельно.

Поэтому при тестировании я хотел бы знать, сколько потоков является параллельной коллекцией, и, если нужно, как я могу настроить количество потоков для параллельных коллекций.

+0

Вы читали эту часть [документации] (Http: // Docs. scala-lang.org/overviews/parallel-collections/performance)? В частности, раздел «Насколько большой должна собираться коллекция?» – hasumedic

+0

Я видел это, но мне было непонятно, что они делают. Я знаю, что нам нужно что-то сделать с помощью функции ForkJoinTaskSupport ... но что это такое? –

ответ

2

Вот часть скайдакока, где они объясняют, как изменить поддержку задачи и обернуть внутри нее 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