Frage von wolfgang9999, 17

Parallelsierung von Java8 Streams?

So ... ich habe eine Frage (in der Hoffnung ein findiger Informatiker tummelt sich hier gerade im Board). Gibt es einen Fall, in dem Streams in Java 8 besser nicht parallelisiert werden sollen? Ich habe einen Primzahlenfilter geschrieben, der im Intermediate map(Predicate->T) einen weiteren Stream produziert, über den dann iteriert wird. Hier kann man doch parallelisieren ... immerhin ist ein Grundgedanke von J8S ja, dass das weitestgehend gefahrlos möglich ist.

Danke!

Antwort
von mepeisen, 6

Ich kann mir gerade noch nicht recht vorstellen, wieso du in map einen weiteren Stream produzieren willst. Wie dem auch sei.

Was die Parallelisierung angeht: Grundsätzlich ist das relativ problemlos möglich. Du musst halt einfach einen parallelStream starten. Das einzige "Problem" dabei ist, dass dein Resultat bzw. die aufgerufenen Funktionen die Einzelelemente in zufälliger Reihenfolge kriegen. je nachdem, was durch den Filter halt zufällig als erstes fertig berechnet wurde. Auf der Oracle-Seite ist das recht gut beschrieben (Ordering): https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html

Ansonsten gelten die Standard-Anmerkungen. Der Filter sollte halt Thread-safe sein.

Antwort
von TeeTier, 3

Gibt es einen Fall, in dem Streams in Java 8 besser nicht parallelisiert werden sollen?

Wenn du Anzahl der zu verarbeitenden Objekte so klein ist, dass allein schon die Instanziierung weiterer Threads jeglichen Performanz-Vorteil auffrisst.

Ansonsten hängt das natürlich immer von deinen Daten ab, aber im Falle von einem Primzahlfilter sehe ich da - ohne jetzt genau deine Implementierung zu kennnen - eigentlich kein Problem. Du hast vermutlich nur so etwas wie das Sieb des Eratosthenes programmiert, und das lässt sich sogar sehr gut parallelisieren. :)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten