Różnica miedzy multithread a parallel stream

0

Jest jakas roznica miedzy multithread a parallelstream?
Powiedzmy podzielenie samemu listy na części i wrzuceniu w osobne watki wykona je równoległe tak samo jak parallel stream który podział i wrzucenie w pule wątków robi za nas pod spodem

Tak samo jak multihread jak i parallel stream moze wykonywać sie na jednym jak i wielu procesorach/rdzeniach rownolegle lub przez thread switching.

Dobrze myślę czy jest jakaś ukryta różnica?

1
maniek41 napisał(a):

Jest jakas roznica miedzy multithread a parallelstream?
Powiedzmy podzielenie samemu listy na części i wrzuceniu w osobne watki wykona je równoległe tak samo jak parallel stream który podział i wrzucenie w pule wątków robi za nas pod spodem

Z tego co rozumiem to pytasz "jaka jest różnica pomiędzy iterowaniem ręcznie z wykorzystaniem narzędzi do wielowątkowości, a użyciem parallelStream()".

No więc tak:

  1. Korzystając z parallelStream() możesz pisać operacje na streamach, co jest już plusem samym w sobie.
  2. Korzystając z parallelStream() nie musisz martwić się o ręczne zarządzanie wątkami, co najwyżej jedynie musisz utworzyć własny ForkJoinPool jeśli nie chcesz odpalać tego na systemowym - a nie chcesz.
  3. Zarządzając wątkami ręcznie masz większą kontrolę nad wątkami, co daje więcej możliwości - w tym więcej możliwości by coś zepsuć.

Tak samo jak multihread jak i parallel stream moze wykonywać sie na jednym jak i wielu procesorach/rdzeniach rownolegle lub przez thread switching.

Z tego co kojarzę to pisząc na parallelStream() twoja kontrola nad wątkami ogranicza się do odpalenia go na konkretnym ForkJoinPool, natomiast to komputer sam sobie decyduje, które zadania i jak wykona równolegle.

2

Nieco złośliwa parafraza twojego pytania to "Jaka jest różnica pomiędzy korzystaniem z języka wysokiego poziomu i kompilatora, a machaniem magnesem nad nóżkami procesora indukując na nich sygnały do zapisania w rejestrze rozkazów".
Używając parallel stream deklarujesz co ma zostać zrobione, używając wątków ręcznie nakazujesz jak to ma zostać zrobione. Czyli w 2 przypadku:

  1. Musisz napisać dodatkowy kod "jak"
  2. Ten kod "jak" jest trwale powiązany z kodem "co"
  3. Masz naprawdę dużo okazji do popełnienia błędów, które w przypadku wielowątkowości bywają problematyczne do rozwiązania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1