[Java] Machen Sie das Programm mit parallelStream 10x schneller

Fazit

parallelStream () kann Java-Programme 10x schneller machen

Umgebung

Überprüfungsinhalt

Verifizierungs-Schlüssel

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.

Ausführungsergebnis

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.

Ergänzung

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.

Hinweis

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

[Java] Machen Sie das Programm mit parallelStream 10x schneller
Machen Sie so etwas wie Javas Enum mit Typescript
Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel
Machen Sie Java Stream Zeilenumbrüche mit Eclipse schön
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Erhöhen Sie die Lautstärke, wenn Sie Docker mit vscode verwenden.
Einfacher LINE BOT mit Java Servlet
Erste Schritte mit Java-Programmen mit Visual Studio Code
Machen Sie mit JavaFX erstellte Kalender-Gadgets mit Java SE 9 kompatibel
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Ich habe nc (netcat) normalerweise mit JAVA gemacht
Machen Sie einen Blackjack mit Java
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Bequemer Download mit JAVA
Java-Download mit Ansible
Ruby 3.0 macht x ** 2 schneller
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
Wird das Programm nur durch Erhöhen der Java-Version schneller?
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!