Java-Stream-API: warum die Unterscheidung zwischen sequenzieller und paralleler Ausführung-Modus?

Aus der Stream javadoc:

Stream-Pipeline ausführen können entweder sequentiell oder parallel. Dieser Ausführungsmodus ist eine Eigenschaft des Streams. Streams erstellt werden, mit einer anfänglichen Wahl der sequentielle oder parallele Ausführung.

Meine Annahmen:

  1. Es gibt keinen funktionalen Unterschied zwischen einer sequentiellen/parallelen streams. Ausgang ist nie betroffen Ausführungsmodus.
  2. Ein paralleler stream ist immer vorzuziehen, da entsprechende Anzahl von Kernen und problem-Größe rechtfertigen den Aufwand, aufgrund der performance-Gewinne.
  3. Wir wollen den code einmal schreiben und überall ausführen, ohne sich um die hardware (das ist Java, nachdem alle).

Wenn diese Annahmen gültig sind (nichts falsch mit ein wenig meta-Annahme), was ist der Wert, mit den Ausführungs-Modus ausgesetzt, die in der api?

Es scheint, wie Sie sollte einfach in der Lage sein, zu erklären Stream, und die Wahl der sequentielle/parallele Ausführung behandelt werden sollten, automatisch in einer Ebene unterhalb, entweder durch den Bibliotheks-code oder der JVM selbst als eine Funktion der verfügbaren Kerne zur Laufzeit die Größe des Problems, etc.

Sicher, unter der Annahme paralleler streams funktionieren auch auf einem single-core-Maschine, vielleicht auch nur immer mit einem parallelen stream erreicht dies. Aber das ist wirklich hässlich - warum haben explizite Verweise auf parallele streams in meinem code, wenn es die Standard-option?

Selbst wenn es ein Szenario, wo würden Sie wollen bewusst zu codieren, die Verwendung von eine fortlaufende stream - warum gibt es nicht einfach eine sub-Schnittstelle SequentialStream für diesen Zweck, anstatt umweltschädliche Stream mit einem execution-wächtermodus?

  • Was ist, wenn Ihr den code nicht thread-safe?
  • Hmm, guter Punkt - aber ist das nicht eher die Ausnahme als den Allgemeinen Fall? Wenn Sie die Programmierung funktional Ihr code sollte thread-sicher. Wenn Sie nicht sind, warum sind Sie mit streams und lambdas in den ersten Platz?
InformationsquelleAutor davnicwil | 2014-04-09
Schreibe einen Kommentar