Supposons que j'ai ce code:flatMap toujours parallèle séquentielle
Collections.singletonList(10)
.parallelStream() // .stream() - nothing changes
.flatMap(x -> Stream.iterate(0, i -> i + 1)
.limit(x)
.parallel()
.peek(m -> {
System.out.println(Thread.currentThread().getName());
}))
.collect(Collectors.toSet());
sortie est le même nom de fil, donc il n'y a aucun avantage de parallel
ici - ce que je veux dire par là qu'il ya un seul thread qui fait tout le travail.
intérieur flatMap
il y a ce code:
result.sequential().forEach(downstream);
Je comprends forçais la sequential
propriété si le flux « extérieur » serait parallèle (ils pourraient probablement bloc), « extérieur » devraient attendre « flatMap "pour finir et l'inverse (puisque le même pool commun est utilisé) Mais pourquoi toujours force cela?
Est-ce une de ces choses que pourrait changer dans une version ultérieure?
Salut, monsieur. est-ce que ça devrait être un bug de stream? –
@ holi-java Je ne dirais pas que c'est un bug, juste une mauvaise conception de l'implémentation qui sera probablement réparée à l'avenir. –
@ holi-java: la paresse manquante peut être considérée comme un bug et il existe déjà un rapport de bug. La parallélisation limitée, cependant, est juste un domaine pour l'amélioration de la performance potentielle. En pratique, cela n'affecte que les cours d'eau ayant un petit nombre d'éléments dans le cours d'eau extérieur et des cours d'eau intérieurs beaucoup plus grands. – Holger