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”?
źródło
Odpowiedzi:
Według Wikipedii :
Oznacza to, że równoległość zawsze oznacza współbieżność.
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 :
źródło
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.
źródło
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.
źródło