Równoległość oznacza współbieżność, ale nie na odwrót, prawda?

15

Często czytam, że równoległość i współbieżność to różne rzeczy. Bardzo często osoby odpowiadające / komentujące sięgają tak daleko, że piszą, że są to dwie zupełnie różne rzeczy. Jednak moim zdaniem są one powiązane, ale chciałbym coś wyjaśnić.

Na przykład, jeśli korzystam z procesora wielordzeniowego i uda mi się podzielić obliczenia na x mniejsze obliczenia (powiedzmy za pomocą rozwidlenia / łączenia), każdy działający w swoim własnym wątku, będę mieć program, który wykonuje równoległe obliczenia (ponieważ przypuszczalnie w dowolnym momencie kilka wątków będzie działać na kilku rdzeniach) i jest to jednocześnie prawda?

Chociaż jeśli po prostu używam, powiedzmy, Java i zajmuję się zdarzeniami interfejsu użytkownika i odświeżeniami w wątku wysyłania zdarzeń oraz uruchamiam jedyny wątek, który sam stworzyłem, będę mieć program, który będzie współbieżny (wątek EDT + GC + mój główny wątek itp.), ale nie równolegle.

Chciałbym wiedzieć, czy mam rację i czy równoległość (w systemie „pojedynczym, ale wielordzeniowym”) zawsze oznacza współbieżność, czy nie?

Ponadto, czy programy wielowątkowe działają na procesorze wielordzeniowym, ale gdzie różne wątki wykonują zupełnie inne obliczenia, uważa się je za „równoległe”?

Cedric Martin
źródło

Odpowiedzi:

13

Według Wikipedii :

Obliczenia równoległe to forma obliczeń, w której wiele obliczeń jest przeprowadzanych jednocześnie, działając na zasadzie, że duże problemy można często podzielić na mniejsze, które są następnie rozwiązywane jednocześnie („równolegle”).

Oznacza to, że równoległość zawsze oznacza współbieżność.

Ponadto, czy programy wielowątkowe działają na procesorze wielordzeniowym, ale gdzie różne wątki wykonują zupełnie inne obliczenia, uważa się je za „równoległe”?

Nie. Istotą paralelizmu jest to, że duży problem jest podzielony na mniejsze, aby mniejsze elementy mogły być rozwiązywane jednocześnie. Elementy są od siebie niezależne (przynajmniej do pewnego stopnia), ale nadal stanowią część większego problemu, który jest teraz rozwiązywany równolegle.

Istotą współbieżności jest to, że wiele wątków (procesów lub komputerów) robi coś jednocześnie , być może (ale niekoniecznie) w jakiś sposób oddziałuje. Wikipedia ponownie :

Współbieżność jest właściwością systemów, w których kilka obliczeń wykonuje się jednocześnie i potencjalnie wchodzi w interakcje ze sobą.

Joonas Pulakka
źródło
4
Wspaniały post. Równoległość jest podzbiorem współbieżności.
3
Przepraszamy, ale ta odpowiedź jest niepoprawna. Na pewno możesz mieć paralelizm bez współbieżności (np. Paralelizm na poziomie bitów), a w rzeczywistości oba są odrębnymi koncepcjami. Współbieżność polega na komponowaniu niezależnych jednostek wykonawczych, podczas gdy równoległość polega na jednoczesnym wykonywaniu potencjalnie powiązanych obliczeń.
Kai Sellgren,
@KaiSellgren: Proszę podać źródło, które potwierdzi twoje oświadczenie.
Joonas Pulakka
Pierwszy cytat wiki jest po prostu błędny. Na szczęście zostało to naprawione jakiś czas temu i teraz poprawnie stwierdza, że ​​równoległość nie polega na współbieżności.
Kai Sellgren,
Rzeczywiście, właśnie tak mówi obecnie pozycja wiki ( możliwe jest równoległość bez współbieżności (np. Równoległość na poziomie bitów) ). Ale w ogóle nie rozumiem tego; czy paralelizm na poziomie bitów nie jest najbardziej zbieżną rzeczą, jaką można sobie wyobrazić - więcej operacji wykonywanych przy mniejszej liczbie instrukcji, to czy niektóre z tych operacji nie są wykonywane w ramach tej samej instrukcji, tj. jednocześnie, tj. jednocześnie?
Joonas Pulakka
3

Kod może być współbieżny, ale nie równoległy.

Wyobraź sobie wiele wątków działających na maszynie z jednym rdzeniem. Ta maszyna z jednym rdzeniem będzie przetwarzać jednocześnie tylko jeden wątek, więc nie będzie równoległości operacji. Ale dla każdego wątku, dzięki temu, jak system operacyjny obsługuje wiele wątków, każdy wątek musi zakładać, że wszystkie pozostałe wątki działają jednocześnie.

Euforyk
źródło
0

Równoległość oznacza po prostu wykonywanie wielu zadań jednocześnie; z drugiej strony współbieżność to zdolność jądra do wykonywania wielu zadań poprzez ciągłe przełączanie między wieloma procesami.

Aby osiągnąć równoległość, ważne jest, aby system miał wiele rdzeni tylko wtedy, gdy równoległość może być skutecznie osiągnięta. Wydajność ma duży wpływ na wydajność i narzut związany jest z pojedynczą maszyną rdzeniową.

Na przykład wcześniejszy system miał tylko jeden rdzeń, a harmonogramy CPU dawałyby złudzenie równoległości poprzez ciągłe przełączanie między procesami, umożliwiając każdemu procesowi robienie postępów.

użytkownik196279
źródło