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.)

questionAnswers(4)

yourAnswerToTheQuestion