Legen Sie die Parallelitätsstufe für alle Sammlungen in Scala 2.10 fest?

8

Ich verstehe, wie man die Parallelitätsstufe für eine einzelne parallele Sammlung über das veränderbare Feld tasksupport einstellt (vgl. Ссылка ).

  

Wie kann ich die Parallelitätsstufe für alle neuen parallelen Sammlungen in Scala 2.10 festlegen?

Eine Hilfsfrage --- ist die tasksupport , die einer parallelen Sammlung zugeordnet ist, die von neuen parallelen Sammlungen geerbt wird? (z. B. mit take , map usw.)

    
Scott Morrison 08.01.2013, 03:27
quelle

1 Antwort

9
  1. Ich habe die Quellen kurz angeschaut und wenn ich die Dinge richtig verstehe, gibt es drei Systemeigenschaften, die verwendet werden können, um den Standard-Ausführungskontext zu konfigurieren, der als Standard-Task-Unterstützung zu dienen scheint. Diese bestimmen die Parallelitätsebene des Task-Support-Objekts.

    • scala.concurrent.context.minThreads : Int, minimale Parallelitätsstufe
    • scala.concurrent.context.numThreads : entweder ein Int, um die direkt zu verwendende Parallelitätsebene anzugeben, oder ein String: ein "x" gefolgt von einem Double (z. B. "x1.5"), das dann mit Runtime.getRuntime.availableProcessors multipliziert wird
    • scala.concurrent.context.maxThreads : Int, maximale Parallelitätsstufe

    Die relevante Quelldatei (wenn ich alles richtig befolgt habe) scheint ExecutionContextImpl .

  2. Was den zweiten Teil Ihrer Frage angeht:
    Transformierende Operationen wie map , filter usw. sollten die Task-Unterstützung beibehalten, die für die ursprüngliche Sammlung festgelegt wurde. Zumindest sehen die Quellen so aus. :)
    Die meisten parallelen Operationen sind in ParIterableLike definiert sie nennen entweder resultWithTaskSupport in Combiner (was gets bekommt die ursprüngliche Task-Unterstützung wird über die Factory in den Zeilen 568 oder 581 in ParIterableLike gesetzt oder die Task-Unterstützung direkt auf die resultierende Sammlung gesetzt.

user500592 12.01.2013, 08:36
quelle