Czy powinienem zawsze używać strumienia równoległego, jeśli to możliwe?
Dzięki Java 8 i lambdas łatwo jest iterować kolekcje jako strumienie i równie łatwo korzystać z równoległego strumienia. Dwa przykłady zdoktorzy, drugi używający równoległego strumienia:
myShapesCollection.stream()
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
myShapesCollection.parallelStream() // <-- This one uses parallel
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
Dopóki nie przejmuję się porządkiem, czy zawsze byłoby korzystne użycie równoległości? Można by pomyśleć, że szybciej dzieli pracę na więcej rdzeni.
Czy są inne względy? Kiedy należy stosować strumień równoległy i kiedy należy stosować nierównoległy?
(To pytanie jest proszone o wywołanie dyskusji o tym, jak i kiedy używać równoległych strumieni, nie dlatego, że myślę, że zawsze ich używanie jest dobrym pomysłem.)