Gemessene Parallelverarbeitung mit Java

Java kann parallel verarbeitet werden, aber ich weiß nicht viel darüber. Deshalb habe ich Parallel Stream und Completable Future ausgeführt, die ich meiner Meinung nach häufig verwende.

Messmethode

Verarbeitung zum individuellen Abrufen von Daten aus der Datenbank in AWS mit findById aus 30 IDs.

Implementierungsumgebung

lokal

AWS RDS

Implementierung

Serie

Serial


        List<Long> list = createIdList(); //30 Fälle
        List<Currency> currencies = new ArrayList<>();
        list.forEach(id -> currencyService.findById(id)
                .ifPresent(currency -> currencies.add(currency)));

Ergebnis


3644ms

ParallelStream

ParallelStream


        List<Long> list = createIdList(); //30 Fälle
        List<Currency> currencies = new ArrayList<>();
        list.parallelStream()
                .forEach(id -> currencyService.findById(id)
                                .ifPresent(currency -> currencies.add(currency)));

Ergebnis


607ms

CompletableFuture

CompletableFuture


        List<Long> list = createIdList(); //30 Fälle
        List<Currency> currencies = new ArrayList<>();
        ExecutorService ex = Executors.newWorkStealingPool();
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        for (long id : list) {
            futures.add(CompletableFuture.runAsync(() -> currencyService
                    .findById(id).ifPresent(c -> currencies.add(c)), ex));
        }
        CompletableFuture.allOf((futures.toArray(new CompletableFuture[futures.size()]))).join();

Ergebnis


604ms

Übrigens, als ich versuchte, es mit "Executors.newSingleThreadExecutor ();" zu einem einzigen Thread zu machen, waren es 4123 ms.

Nachtrag

In diesem Experiment werden wir Daten an RDS senden, aber es scheint, dass wir vorsichtig sein müssen, wenn wir eine externe Verbindung mit Parallel Stream herstellen. http://taichiw.hatenablog.com/entry/2018/09/30/224907

Ich habe es auch zur Liste in der Schleife hinzugefügt, aber es scheint nicht gut zu sein, da es sich um einen sogenannten Nebeneffekt handelt.

Recommended Posts

Gemessene Parallelverarbeitung mit Java
Parallele Ausführung in Java
Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Datumsverarbeitung in Java (LocalDate: Initialisierung)
Informationen zur Dateikopierverarbeitung in Java
Änderungen in Java 11
Janken in Java
Java-Thread-Verarbeitung
Java-String-Verarbeitung
[Java] Multithread-Verarbeitung
Umfangsrate in Java
[Java] Stream-Verarbeitung
FizzBuzz in Java
Java iterativer Prozess
Einführung des NLP4J- [000] Natural Language Processing Index in Java
Lesen Sie JSON in Java
Machen Sie einen Blackjack mit Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
POST JSON in Java
Verwenden Sie MouseListener für die Verarbeitung
Fehler in Java ausdrücken
JAVA-Konstruktoraufrufverarbeitung
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Java zufällig, verschiedene Verarbeitung
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.
Versuchen Sie es mit RocksDB mit Java
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
[Java] Multithread-Verarbeitung - Exklusive Steuerung
Holen Sie sich EXIF-Informationen in Java
Bearbeiten von ini in Java: ini4j
Java-Geschichte in dieser Welt
Versuchen Sie, JavaScript in Java aufzurufen
Probieren Sie den Funktionstyp in Java aus! ①
Ich habe ein Roulette in Java gemacht.
Schreibverarbeitung in IntelliJ IDEA