parallelStream ()
kann Java-Programme 10x schneller machen
Main.java
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Integer> n1 = new ArrayList<>();
List<Integer> n2 = new ArrayList<>();
for(int i = 0; i < 500; i++) {
n1.add(i);
n2.add(i);
}
long s1 = System.currentTimeMillis();
n1.stream().forEach(i -> { try { Thread.sleep(10); } catch(Exception e) { e.printStackTrace(); } });
long t1 = System.currentTimeMillis();
long s2 = System.currentTimeMillis();
n2.parallelStream().forEach(i -> { try { Thread.sleep(10); } catch(Exception e) { e.printStackTrace(); } });
long t2 = System.currentTimeMillis();
System.out.printf("n1 exec time: %d [ms]\n", t1 - s1);
System.out.printf("n2 exec time: %d [ms]\n", t2 - s2);
}
}
Es gibt nicht viele Punkte zu sammeln und zu erklären. n1
ist ein sequentieller Stream und n2
ist ein paralleler Stream, derThread.sleep (10)
500 Mal aufruft. Der Try-Catch wird ausgeführt, um die aktivierte Ausnahme von "Thread.sleep ()" zu behandeln. Das "i" im "forEach" ist in der Leere verschwunden.
n1 exec time: 5298 [ms]
n2 exec time: 505 [ms]
n2
ist mehr als 10 mal schneller als n1
!
Für "n1" wird das Ergebnis von 10 ms x 500 mal deutlich gezeigt.
Gemäß der offiziellen Dokumentation (https://docs.oracle.com/de/java/javase/11/docs/api/java.base/java/util/concurrent/ForkJoinPool.html) beträgt die Standardanzahl paralleler Threads Es scheint gleich der Anzahl der im Computer verfügbaren Prozessoren zu sein.
For applications that require separate or custom pools, a ForkJoinPool may be constructed with a given target parallelism level; by default, equal to the number of available processors.
Angesichts der Tatsache, dass die Ausführungszeit im parallelen Stream weniger als 1/10 der im sequentiellen Stream beträgt, scheint die Anzahl der logischen Prozessoren anstelle der Anzahl der physischen Prozessoren als Standardwert angewendet zu werden. "Es wird zehnmal schneller sein" ... Oma Tamaki Nicht wahr? !! Ich denke, dass es ein sehr vernünftiges Tsukkomi gibt, aber ich denke, dass die neuesten PCs ungefähr 8 logische Prozessoren haben, also bitte verzeihen Sie mir.
Grundsätzlich sollten Sie die Objekte, auf die in jedem Thread häufig verwiesen wird, nicht aktualisieren oder löschen (z. B. zur Liste hinzufügen).
Recommended Posts