parallelStream ()
peut rendre les programmes Java 10x plus rapides
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);
}
}
Il n'y a pas beaucoup de points à collecter et à expliquer. «n1» est un flux séquentiel et «n2» est un flux parallèle appelant «Thread.sleep (10)» 500 fois. Le try-catch est fait pour gérer l'exception vérifiée de Thread.sleep ()
. ʻI in
forEach` disparaît dans le vide.
n1 exec time: 5298 [ms]
n2 exec time: 505 [ms]
«n2» est plus de 10 fois plus rapide que «n1»! Pour «n1», le résultat de 10 ms x 500 fois est clairement indiqué.
Selon la documentation officielle (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ForkJoinPool.html), le nombre par défaut de threads parallèles est , Il semble être égal au nombre de processeurs disponibles dans l'ordinateur.
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.
En regardant le fait que le temps d'exécution dans le flux parallèle est inférieur à 1/10 de celui du flux séquentiel, il semble que le nombre de processeurs logiques soit appliqué comme valeur par défaut au lieu du nombre de processeurs physiques. "Ce sera 10 fois plus rapide" ... Oma Tamaki N'est-ce pas! !! Je pense qu'il y a un tsukkomi très raisonnable, mais je pense que les PC les plus récents ont environ 8 processeurs logiques, alors pardonnez-moi.
Fondamentalement, vous ne devez pas mettre à jour ou supprimer les objets qui sont généralement référencés dans chaque thread (comme ajouter à la liste).
Recommended Posts