Unterschied zwischen java 8 streams und parallele streams
Schrieb ich code mit java-8-streams und parallele streams für die gleiche Funktionalität mit einem custom collector zum ausführen einer aggregation Funktion.
Wenn ich die CPU-Auslastung mit htop
es zeigt alle CPU-Kerne genutzt, für die beiden `Ströme' und 'parallele streams" - version. So, es scheint, als Liste.stream() verwendet wird, es verwendet auch alle CPUs. Hier, was ist der genaue Unterschied zwischen parallelStream() und stream() in Bezug auf Nutzung von multi-core -.
- Die nicht-parallelen streams die Verwendung von nur einem thread zur Bearbeitung Ihrer pipeline. Das ist eine harte Tatsache. Es sei denn, Sie tun etwas explicit multithreading mit stream-processing, dann werden alle bestimmten terminal-Betrieb ausgeführt wird, auf einem single core gleichzeitig. Wenn Sie beziehen sich auf die Tatsache, dass htop zeigt eine Auslastung aller cores, die nur sein kann durch den gleichen thread Migration von core zu core (nicht angeheftet, um einen single-core).
- Es wäre besser, wenn Sie den code Ihres Programms, so können wir reproduzieren Ihre Wirkung. Wie Marko schon sagte,
list.stream()
arbeitet nacheinander im selben thread, in dem die terminal-Betrieb ausgestellt wurde, das ist 100% Fakt. Wir können jedoch nicht erklären, warum Sie beobachtet die CPU-Auslastung, weil wir nicht den code sehen. - Bitte finden Sie den code hier ein - github.com/yogirjoshi/monitortools/blob/master/src/main/java/...
- Ich denke diese Antwort kann dir helfen:stackoverflow.com/questions/23170832/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten Sie das folgende Programm:
Werden Sie feststellen, dass dieses Programm die Ausgabe der zahlen von 0 bis 999 nummeriert, in der Reihenfolge, in der Sie in der Liste. Wenn wir das ändern
stream()
zuparallelStream()
dies nicht mehr der Fall ist (zumindest auf meinem computer): alle Anzahl geschrieben werden, aber in einer anderen Reihenfolge. So, anscheinendparallelStream()
in der Tat mehrere threads verwendet.Den
htop
erklärt sich durch die Tatsache, dass auch single-threaded Anwendungen sind aufgeteilt auf mehrere Kerne, die von den meisten modernen Betriebssystemen (Teile von dem gleichen thread kann auf mehrere Kerne, aber natürlich nicht gleichzeitig). Also, wenn Sie sehen, dass ein Prozess mehr als ein Kern vorhanden ist, bedeutet dies nicht notwendigerweise, dass das Programm mehrere threads verwendet.Außerdem kann die Leistung nicht verbessern, wenn mehrere threads verwenden. Die Kosten der Synchronisation kann nihilite die Gewinne, die bei der Verwendung mehrerer threads. Für einfache Test-Szenarien ist dies oft der Fall. Zum Beispiel, im obigen Beispiel
System.out
synchronisiert ist. Also, effektiv, nur die Zahl geschrieben werden können, zur gleichen Zeit, obwohl mehrere threads verwendet werden.