2016-08-01 4 views
1

Ich benutze Scala Parallelsammlungen.Scala Parallel Collections: Wie kann ich die Anzahl der Threads kennen und konfigurieren?

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

Es ist extrem schnell, aber ich habe das Gefühl, dass ich in Out-of-Memory-Probleme laufen kann, wenn wir zu können „largeComputation“ parallel laufen.

Daher beim Testen würde ich gerne wissen, wie viele Threads ist die parallele Sammlung und wenn nötig, wie kann ich die Anzahl der Threads für die parallelen Sammlungen konfigurieren.

+0

Haben Sie lesen dieses Stück [Dokumentation] (http: // docs. scala-lang.org/overviews/parallel-collections/performance)? Insbesondere der Abschnitt "Wie groß sollte eine Sammlung parallel sein?" – hasumedic

+0

Ich sah es, aber es war mir nicht klar, was sie tun. Ich weiß, dass wir etwas mit der ForkJoinTaskSupport-Sache machen müssen ... aber was genau ist das? –

Antwort

2

Hier ist ein Stück von scaladoc, wo sie erklären, wie man die Aufgabenunterstützung ändert und darin die ForkJoinPool einwickelt. Wenn Sie die ForkJoinPool instanziiert passieren Sie die Parallelität Ebene gewünschten Parameter:

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)) 

Also für Ihren Fall wird es

sein
val largeList = list.par 
largerList.tasksupport = new ForkJoinTaskSupport(
    new scala.concurrent.forkjoin.ForkJoinPool(x) 
) 
largerList.map(x => largeComputation(x)).toList 
Verwandte Themen