4

nach Erstellung to the official docs es zwei Möglichkeiten parallel Sammlungen zu erzeugen, sind:Was die Kosten der Umwandlung einer sequentiellen Auflistung in eine parallele eines ist, gegen die es von Grund

1)

// There's a little bug here, doesn't matter for the sake of the question 
import scala.collection.parallel.mutable.ParArray 
val pv = new ParVector[Int] 

2)

val pv = Vector(1,2,3,4,5,6,7,8,9).par 

Nun, was sind die Unterschiede? Gibt es irgendwelche Leistungseinbußen, wenn ich sie aus einer einfachen sequenziellen Sammlung konvertiere?

Was würden Sie tun, wenn Sie eine parallele Sammlung (sagen wir mehrere tausend Elemente) erstellen müssen, würden Sie sie von Grund auf neu erstellen oder konvertieren?

Danke Jungs!

EDIT:

Wie @oxbow_lakes sagt, es ist ein Stück docs, die zu diesem Thema konzentrieren, aber ich versuche, „erfahrene Ratschläge“ zu bekommen. Ich meine, was würden Sie tun, wenn Sie zum Beispiel eine große Sammlung aus einer Datenbank lesen müssen?

Antwort

3

Hängt von der Sammlung ab. Vector ist im Grunde frei, ParVector ist nur ein Wrapper um den Vektor. Das Gleiche gilt für Arrays. Andere, z.B. List, muss vollständig in einer anderen Struktur kopiert werden, die für Parallelismus zugänglicher ist. Und dann wieder in eine neue Liste kopiert, wenn das Ergebnis auch eine Liste sein soll.

Sie können einen Blick auf this brand new guide on the scala documentation site, Abschnitt Erstellen einer parallelen Sammlung.

3

Die offizielle Dokumentation für die par Methode sagt:

Für die meisten Sammlungstypen, diese Methode eine neue parallele Sammlung von schafft alle Elemente zu kopieren. Für diese Sammlung, Par nimmt lineare Zeit [...]

Spezifische Sammlungen (z ParArray oder mutable.ParHashMap) außer Kraft setzen dieses Standardverhalten durch eine parallele Sammlung zu schaffen, die die gleiche zugrunde liegende Datenmenge teilt. Für diese Sammlungen ist par konstant oder sublinear Zeit.

, dass im Allgemeinen ist der Betrieb in O (n), mit Ausnahme bei der Verwendung der wandelbar Sammlungen ParArray und ParHashMap, wo es weniger ist, dass O (n) - aber möglicherweise nicht konstante Zeit.

+0

+1 Danke @oxbow_lakes Ich habe das gelesen, aber ich war auf der Suche nach einem Rat gegeben Erfahrung. Zum Beispiel, was würden Sie tun, wenn Sie eine große Sammlung erstellen möchten (sagen wir zum Beispiel, sie aus einer DB zu lesen). – santiagobasulto

+0

Ich bin nicht sicher, ob Sie behaupten, nur veränderbare Sammlungen genießen diesen Vorteil oder nicht, aber das ist sicherlich nicht wahr. 'List' muss kopiert werden, stimmt, aber' Vector' zum Beispiel nicht. –