Jaka jest różnica między współbieżnością a równoległością?

1075

Jaka jest różnica między współbieżnością a równoległością?

Przykłady są mile widziane.

StackUnderflow
źródło
41
krótka odpowiedź: Współbieżność to dwie linie klientów zamawiających od jednego kasjera (linie zamawiają na zmianę); Równoległość to dwie linie klientów zamawiających u dwóch kasjerów (każda linia otrzymuje własną kasę).
chharvey
@chharvey: Naprawdę uważam, że taka powinna być odpowiedź. Krótkie (dwa wiersze tekstu, jeśli pominąć „krótką odpowiedź”), do rzeczy, natychmiast zrozumiałe. Ładnie wykonane!
Mike Maxwell

Odpowiedzi:

1269

Współbieżność polega na tym, że dwa lub więcej zadań można uruchomić, uruchomić i zakończyć w nakładających się okresach. Nie musi to oznaczać, że oboje będą działać w tym samym momencie. Na przykład wielozadaniowość na maszynie z jednym rdzeniem.

Równoległość ma miejsce wtedy, gdy zadania dosłownie działają w tym samym czasie, np. Na procesorze wielordzeniowym.


Cytując wielowątkowy przewodnik programisty firmy Sun :

  • Współbieżność: warunek, który występuje, gdy co najmniej dwa wątki robią postępy. Bardziej uogólniona forma paralelizmu, która może obejmować podział czasowy jako formę wirtualnego paralelizmu.

  • Równoległość: warunek powstający, gdy co najmniej dwa wątki są wykonywane jednocześnie.

RichieHindle
źródło
169
Podoba mi się ta odpowiedź, ale być może posunę się dalej i scharakteryzuję współbieżność jako właściwość programu lub systemu (i równoległość jako zachowanie podczas wykonywania wielu zadań jednocześnie).
Adrian Mouat,
24
Bardzo podoba mi się komentarz Adriana Mouata. Zobacz także to doskonałe wyjaśnienie: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman
9
@Raj: Prawidłowe, równoległość (w sensie wielowątkowości) nie jest możliwa w przypadku procesorów jednordzeniowych.
RichieHindle
5
Gdyby obie wartości były sekwencyjne i równoległe w wyliczeniu, jak brzmiałaby nazwa tego wyliczenia?
toddmo
11
W tym celu, cytuję Sun można przeformułować jak: - Współbieżnym: Stan, który występuje, gdy w danym okresie czasu, dwa wątki robią postępy - Parallelism: Warunek A, który powstaje, gdy biorąc pod uwagę konkretny punkt w czasie, dwa wątki wykonują jednocześnie
Phillip
494

Dlaczego istnieje zamieszanie?

Pomyłka istnieje, ponieważ znaczenia obu słów w słowniku są prawie takie same:

  • Współbieżne : istniejące, zdarzające się lub wykonywane w tym samym czasie (dictionary.com)
  • Równolegle : bardzo podobne i często dzieje się w tym samym czasie (Merriam Webster).

Jednak sposób ich wykorzystania w informatyce i programowaniu jest zupełnie inny. Oto moja interpretacja:

  • Współbieżność : Przerwalność
  • Równoległość : niezależność

Co mam na myśli przez powyższe definicje?

Wyjaśnię analogię do świata rzeczywistego. Powiedzmy, że musisz wykonać 2 bardzo ważne zadania w ciągu jednego dnia:

  1. Zdobądź Paszport
  2. Przygotuj prezentację

Problem polega na tym, że zadanie 1 wymaga udania się do wyjątkowo biurokratycznego biura rządowego, które zmusza do czekania 4 godzin w kolejce, aby otrzymać paszport. Tymczasem zadanie 2 jest wymagane przez biuro i jest to zadanie krytyczne. Oba muszą zostać zakończone w określonym dniu.

Przypadek 1: Wykonanie sekwencyjne

Zwykle jedziesz do biura paszportowego przez 2 godziny, czekasz w kolejce przez 4 godziny, wykonujesz zadanie, wracasz o dwie godziny, wracasz do domu, pozostań przytomny jeszcze 5 godzin i załatwisz prezentację.

Przypadek 2: jednoczesne wykonywanie

Ale jesteś mądry. Planujesz z wyprzedzeniem. Nosisz ze sobą laptopa i czekając w kolejce, zaczynasz pracę nad prezentacją. W ten sposób po powrocie do domu wystarczy przepracować 1 dodatkową godzinę zamiast 5.

W takim przypadku oba zadania wykonujesz sam, tylko w kawałkach. Przerwałeś zadanie paszportowe, czekając w kolejce i pracując nad prezentacją. Kiedy twój numer został wywołany, przerwałeś zadanie prezentacji i przeszedłeś na zadanie paszportowe. Oszczędność czasu była zasadniczo możliwa dzięki przerywalności obu zadań.

Współbieżność, IMO, można rozumieć jako właściwość „izolacji” w ACID . Dwie transakcje w bazie danych są uważane za izolowane, jeśli pod-transakcje mogą być wykonywane w każdy sposób z przeplotem, a końcowy wynik jest taki sam, jak gdyby dwa zadania były wykonywane po kolei. Pamiętaj, że zarówno w przypadku zadań związanych z paszportem, jak i prezentacji jesteś jedynym katem .

Przypadek 3: wykonywanie równoległe

Teraz, skoro jesteś tak sprytnym facetem, najwyraźniej awansujesz i masz asystenta. Zanim więc odejdziesz, aby rozpocząć zadanie paszportowe, zadzwoń do niego i powiedz mu, aby przygotował pierwszy szkic prezentacji. Spędzasz cały dzień i kończysz zadanie paszportowe, wracasz i widzisz swoje e-maile oraz znajdujesz wersję roboczą prezentacji. Wykonał całkiem solidną robotę i po kilku zmianach w ciągu 2 godzin, sfinalizujesz go.

Teraz, ponieważ twój asystent jest tak samo bystry jak ty, był w stanie pracować nad nim niezależnie , bez konieczności ciągłego proszenia cię o wyjaśnienia. W związku z tym, ze względu na niezależność zadań, były one wykonywane jednocześnie przez dwóch różnych katów .

Nadal ze mną? W porządku...

Przypadek 4: Współbieżne, ale nie równoległe

Pamiętasz swoje zadanie paszportowe, gdzie musisz czekać w kolejce? Ponieważ jest to twój paszport, asystent nie może czekać na ciebie w kolejce. Zatem zadanie paszportowe ma możliwość przerywania (możesz zatrzymać go podczas oczekiwania w kolejce i wznowić go później, gdy zadzwoni twój numer), ale nie ma niezależności (asystent nie może czekać zamiast ciebie).

Przypadek 5: Równoległe, ale nie współbieżne

Załóżmy, że rząd ma kontrolę bezpieczeństwa, aby wejść do lokalu. Tutaj musisz usunąć wszystkie urządzenia elektroniczne i przekazać je funkcjonariuszom, a oni zwrócą twoje urządzenia dopiero po zakończeniu zadania.

W takim przypadku zadanie paszportowe nie jest ani niezależne, ani przerywane . Nawet jeśli czekasz w kolejce, nie możesz pracować nad czymś innym, ponieważ nie masz niezbędnego sprzętu.

Podobnie powiedzmy, że prezentacja ma tak matematyczny charakter, że potrzebujesz 100% koncentracji przez co najmniej 5 godzin. Nie możesz tego zrobić, czekając w kolejce na zadanie paszportowe, nawet jeśli masz przy sobie laptopa.

W takim przypadku zadanie prezentacji jest niezależne (Ty lub Twój asystent możecie poświęcić 5 godzin skoncentrowanego wysiłku), ale nie jest ono przerywane .

Przypadek 6: jednoczesne i równoległe wykonywanie

Teraz powiedz, że oprócz przypisania asystenta do prezentacji, masz również przy sobie laptopa do zadania paszportowego. Podczas oczekiwania w kolejce zobaczysz, że twój asystent utworzył pierwsze 10 slajdów we wspólnej talii. Wysyłasz komentarze do jego pracy z pewnymi poprawkami. Później, kiedy wrócisz do domu, zamiast 2 godzin na sfinalizowanie projektu, potrzebujesz tylko 15 minut.

Było to możliwe, ponieważ zadanie prezentacji ma niezależność (jedno z was może to zrobić) i przerywalność (można je zatrzymać i wznowić później). Więc jednocześnie wykonałeś oba zadania i wykonałeś zadanie prezentacji równolegle.

Powiedzmy, że rząd jest nie tylko biurokratyczny, ale i skorumpowany. W ten sposób możesz pokazać swoją tożsamość, wprowadzić ją, zaczekać w kolejce, aż zadzwoni twój numer, przekupić strażnika i kogoś innego, aby utrzymać twoją pozycję na linii, wymknąć się, wrócić przed wywołaniem twojego numeru i wznowić czekanie siebie.

W takim przypadku możesz wykonywać zadania związane z paszportem i prezentacją jednocześnie i równolegle. Możesz wymknąć się, a twoją pozycję zajmuje asystent. Oboje możecie wtedy popracować nad prezentacją itp.


Powrót do informatyki

W świecie komputerów przedstawiono przykładowe scenariusze typowe dla każdego z tych przypadków:

  • Przypadek 1: Przetwarzanie przerwania.
  • Przypadek 2: Gdy jest tylko jeden procesor, ale wszystkie zadania wykonawcze mają czas oczekiwania ze względu na operacje we / wy.
  • Przypadek 3: Często obserwowany, gdy mówimy o klastrach zmniejszania mapy lub klastrów hadoop.
  • Przypadek 4: Myślę, że przypadek 4 jest rzadki. Często zdarza się, że zadanie jest współbieżne, ale nie równoległe. Ale może się zdarzyć. Załóżmy na przykład, że twoje zadanie wymaga dostępu do specjalnego układu obliczeniowego, do którego można uzyskać dostęp tylko za pośrednictwem procesora-1. Zatem nawet jeśli procesor-2 jest wolny, a procesor-1 wykonuje jakieś inne zadanie, specjalne zadanie obliczeniowe nie może kontynuować na procesorze-2.
  • Przypadek 5: także rzadki, ale nie tak rzadki jak Przypadek 4. Kod niejednorodny może być regionem krytycznym chronionym przez muteksy. Po uruchomieniu musi zostać wykonany do końca. Jednak dwa różne regiony krytyczne mogą działać jednocześnie na dwóch różnych procesorach.
  • Przypadek 6: IMO, większość dyskusji na temat programowania równoległego lub współbieżnego mówi w zasadzie o przypadku 6. Jest to połączenie i połączenie zarówno wykonywania równoległego, jak i równoczesnego.

Współbieżność i start

Jeśli rozumiesz, dlaczego Rob Pike twierdzi, że współbieżność jest lepsza, musisz zrozumieć, że powodem jest. Masz naprawdę długie zadanie, w którym istnieje wiele okresów oczekiwania, w których czekasz na niektóre operacje zewnętrzne, takie jak odczyt plików, pobieranie z sieci. W swoim wykładzie mówi tylko: „po prostu przerwij to długie, sekwencyjne zadanie, abyś mógł zrobić coś pożytecznego podczas oczekiwania”. Właśnie dlatego mówi o różnych organizacjach z różnymi snajperami.

Teraz siła Go wynika z tego, że zerwanie jest naprawdę łatwe go słowom kluczowym i kanałom. Ponadto istnieje doskonałe wsparcie w środowisku uruchomieniowym, aby zaplanować te goroutine.

Ale w gruncie rzeczy, czy współbieżność jest lepsza niż równoległość?

Czy jabłka są lepsze niż pomarańcze?

Metos
źródło
Dzięki za przypadek 5. Często myślę, że równoległe domniemanie oznacza współbieżność.
hqt
2
Pętla zdarzeń Node.js jest dobrym przykładem dla przypadku 4. Nawet jeśli procesor B ma wolne zasoby, żądanie X powinno być obsługiwane przez procesor A, który jest zajęty przetwarzaniem Y. Jeśli wywołanie setTimeout jest wywołane dla Y, X może być przetworzone, po upływie limitu czasu Y również zakończy przetwarzanie.
Lucas Janon
Warto zwrócić uwagę na dwie definicje słowa „współbieżność”, które zostały umieszczone w przyjętej odpowiedzi, a ta jest dość wyraźna . Pierwszy odnosi się do koncepcji uruchamiania kilku zadań w nakładających się przedziałach czasowych (tj. Równoległość oznacza współbieżność przez def), drugi odnosi się do koncepcji przerwania jednego zadania w celu uruchomienia innego.
Mergasow,
Podobnie do powyższego komentarza - wielowątkowy python jest przykładem przypadku 4. Nie sądzę, że ten przypadek jest rzadki. Każda globalna blokada interpretera spowoduje przypadek 4 (jeśli w ogóle pozwala na współbieżność).
chub500
245

Lubię przemówienie Roba Pike'a: Współbieżność to nie równoległość (jest lepsza!) (Slajdy) (dyskusja)

Rob zwykle mówi o Go i zwykle porusza kwestię współbieżności z równoległością w wizualnym i intuicyjnym wyjaśnieniu! Oto krótkie podsumowanie:

Zadanie: wypalmy stos przestarzałych instrukcji językowych! Jeden po drugim!

Zadanie

Współbieżność: Istnieje wiele równoczesnych rozkładów zadania! Jeden przykład:

Poszukiwacze

Równoległość: poprzednia konfiguracja występuje równolegle, jeśli w tym samym czasie pracują co najmniej 2 susły lub nie.

twierdzić
źródło
9
Film wideo znajduje się na blog.heroku.com/archives/2013/2/24/…
Pramod
15
Przepraszam, musiałem głosować za bitem „jest lepiej”. Prawidłowa odpowiedź jest taka, że ​​jest inna. Współbieżność jest częścią problemu. Równoległość jest częścią rozwiązania.
pyon
@ EduardoLeón Oczywiście nie sprawdziłeś nazwy rozmowy. Współbieżność to nie problem, to tylko sposób myślenia o problemie / zadaniu.
patrz
5
@asfer Concurrency jest częścią struktury problemu. Nawiasem mówiąc, nie należy łączyć „współbieżności” (problemu) z „kontrolą współbieżności” (rozwiązaniem często stosowanym razem z równoległością).
pyon
1
Obejrzałem to i szczerze to mi się nie podobało. Dodaje niepotrzebne komplikacje i nerwowość do czegoś, co powinno być wyjaśnione w znacznie prostszy sposób (sprawdź odpowiedź żonglerów tutaj).
jj_
146

Aby dodać do tego, co powiedzieli inni:

Współbieżność jest jak żongler żonglujący wieloma piłkami. Niezależnie od tego, jak się wydaje, żongler łapie / rzuca tylko jedną piłkę na rękę na raz. Równoległość polega na jednoczesnym żonglowaniu wieloma żonglerami.

Thomas T.
źródło
2
Będę wybredna, ale jeśli żonglujesz parą piłek, możesz mieć dwie piłki jednocześnie (w zależności od tego, jak żonglujesz).
thebugfinder
52
@ thebugfinder, Aby upewnić się, że nie ma już miejsca na błędy w przykładzie Thomasa. Współbieżność jest jak osoba żonglująca tylko jedną ręką. Niezależnie od tego, jak się wydaje, osoba trzyma tylko jedną piłkę na raz. Równoległość ma miejsce, gdy żongler używa obu rąk.
bigtunacan
to, co właściwie
chciałem
1
Bardzo sprytna odpowiedź. Zdecydowanie rozumiem sens robaka, ale bardzo podoba mi się ta odpowiedź, jeśli jedno działanie jest uwzględniane i uzgadniane.
BK,
2
Myślę, że lepiej z „Równoległością jest posiadanie jednej osoby na każdą piłkę”. Jeśli liczba kulek wzrośnie (wyobraź sobie żądania internetowe), osoby te mogą rozpocząć żonglerkę, dzięki czemu wykonanie będzie równoległe i równoległe. Chciałbym też, żeby ktoś mógł wyjaśnić wzór reaktora przykładem kuglarzy.
jj_
120

Załóżmy, że masz program, który ma dwa wątki. Program może działać na dwa sposoby:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

W obu przypadkach mamy współbieżność z samego faktu, że działa więcej niż jeden wątek.

Gdybyśmy uruchomili ten program na komputerze z pojedynczym rdzeniem procesora, system operacyjny przełączałby się między dwoma wątkami, umożliwiając działanie jednego wątku na raz.

Gdybyśmy uruchomili ten program na komputerze z wielordzeniowym procesorem, moglibyśmy równolegle uruchomić dwa wątki - obok siebie w tym samym czasie.

Pithikos
źródło
4
Podobały mi się bloki nici. Proste, ale idealne! Dziękuję za tak niesamowitą odpowiedź.
bozzmob
53

Współbieżność: jeśli dwa lub więcej problemów rozwiązuje jeden procesor. alternatywny tekst

Równoległość: jeśli jeden problem został rozwiązany przez wiele procesorów.

alternatywny tekst

Rajendra Uppal
źródło
55
Nie zgodziłbym się z tym - program zaprojektowany jako współbieżny może, ale nie musi być uruchomiony równolegle; współbieżność jest bardziej atrybutem programu, podczas jego wykonywania może wystąpić równoległość.
Adrian Mouat,
36

Spróbuję wyjaśnić interesującym i łatwym do zrozumienia przykładem. :)

Załóżmy, że organizacja organizuje turniej szachowy, w którym 10 graczy ( z równymi umiejętnościami gry w szachy ) rzuci wyzwanie zawodowemu mistrzowi szachowemu. A ponieważ szachy to gra 1: 1, dlatego organizatorzy muszą przeprowadzić 10 gier w sposób efektywny czasowo, aby mogli jak najszybciej zakończyć całe wydarzenie.

Mamy nadzieję, że następujące scenariusze z łatwością opisają różne sposoby prowadzenia tych 10 gier:

1) SZEREGOWY - powiedzmy, że profesjonalista gra z każdą osobą jedna po drugiej, tzn. Rozpoczyna i kończy grę z jedną osobą, a następnie rozpoczyna kolejną grę z następną osobą i tak dalej. Innymi słowy, postanowili przeprowadzić gry sekwencyjnie. Więc jeśli jedna gra zajmie 10 minut, to 10 gier zajmie 100 minut, załóż też, że przejście z jednej gry do drugiej zajmuje 6 sekund, a następnie dla 10 gier będzie to 54 sekund (około 1 minuty).

więc całe wydarzenie zakończy się w przybliżeniu za 101 minut ( NAJGORSZE PODEJŚCIE )

2) OBECNY - powiedzmy, że profesjonalista zagrywa swoją turę i przechodzi do następnego gracza, więc wszyscy gracze grają jednocześnie, ale profesjonalny gracz nie ma dwóch osób na raz, gra swoją turę i przechodzi do następnej osoby. Teraz załóżmy, że profesjonalny gracz potrzebuje 6 sekund, aby zagrać swoją turę, a także czas przejścia profesjonalnego gracza czarno-białego dla dwóch graczy wynosi 6 sekund, więc całkowity czas przejścia z powrotem do pierwszego gracza wyniesie 1 min (10 x 6 s). Dlatego zanim wróci do pierwszej osoby, z którą wydarzenie się rozpoczęło, minęły 2 minuty (10xtime_per_turn_by_champion + 10xtransition_time = 2min)

Zakładając, że wszyscy gracze potrzebują 45 sekund na zakończenie swojej tury, więc na podstawie 10 minut na grę od wydarzenia SERIAL nie. rund przed zakończeniem gry powinno 600 / (45 + 6) = 11 rund (około)

Całe wydarzenie zakończy się w przybliżeniu za 11xtime_per_turn_by_player _ & _ champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20,35 minut (około)

ZOBACZ POPRAWĘ od 101 minut do 20,35 minut ( LEPSZE PODEJŚCIE )

3) RÓWNOLEGŁE - powiedzmy, że organizatorzy zdobywają dodatkowe fundusze, dlatego postanowili zaprosić dwóch profesjonalnych graczy-mistrzów (obaj równie zdolni) i podzielili grupę 10 graczy (pretendentów) na dwie grupy po 5 osób i przydzielili ich do dwóch mistrzów, tj. Jednego grupuj każdy. Teraz wydarzenie przebiega równolegle w tych dwóch setach, tzn. Co najmniej dwóch graczy (po jednym w każdej grupie) gra przeciwko dwóm zawodowym graczom w swojej grupie.

Jednak w grupie zawodowy gracz, który bierze jednego gracza na raz (tj. Sekwencyjnie), więc bez żadnych obliczeń można łatwo wywnioskować, że całe wydarzenie zakończy się w przybliżeniu za 101/2 = 50,5 min.

ZOBACZ POPRAWĘ od 101 minut do 50,5 minuty ( DOBRE PODEJŚCIE )

4) CONCURRENT + RÓWNOLEGŁOŚĆ - W powyższym scenariuszu powiedzmy, że dwaj mistrzowie będą grać jednocześnie (czytaj 2 punkt) z 5 graczami w ich odpowiednich grupach, więc teraz gry między grupami są rozgrywane równolegle, ale w grupie są równoległe.

Tak więc gry w jednej grupie zakończą się w przybliżeniu za 11xtime_per_turn_by_player _ & _ champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930 s = 15,5 min (około)

Całe wydarzenie (obejmujące dwie takie równoległe grupy) zakończy się w przybliżeniu za 15,5 minuty

ZOBACZ POPRAWĘ od 101 minut do 15,5 minuty ( NAJLEPSZE PODEJŚCIE )

UWAGA: w powyższym scenariuszu, jeśli zastąpisz 10 graczy 10 podobnymi zadaniami i dwoma profesjonalnymi graczami z dwoma rdzeniami procesora, wówczas ponownie zostanie zachowana następująca kolejność:

SZEREGOWE> RÓWNOLEGŁE> KONCENTRENT> CONCURRENT + RÓWNOLEGŁE

(UWAGA: ta kolejność może się zmienić w innych scenariuszach, ponieważ ta kolejność w dużym stopniu zależy od wzajemnej zależności zadań, komunikacji wymaga zadań czarno-białych i przejściowych zadań czarno-białych)

sactiw
źródło
2
Świetne wyjaśnienie. Jest jeden dodatek. Model współbieżny dla drugiego przypadku (gdy zawodowy gracz porusza czarno-białych graczy) zostanie ulepszony tylko wtedy, gdy gracz wykona swoją turę w ciągu 45 sekund. Innymi słowy, powinniśmy mieć we / wy czekające w całym procesie. Jeśli zwykły gracz może skręcić w mniej niż 45 sekund (5 lub 10 sekund), poprawa będzie mniejsza. Zatem jeśli nie będziemy mieć czasu oczekiwania na operacje we / wy w naszej pracy, współbieżność będzie mniej więcej taka sama jak w przypadku wykonywania szeregowego.
Psylone
33

Prosty przykład:

Jednocześnie: „Dwie kolejki uzyskują dostęp do jednego bankomatu”

Równoległe jest: „Dwie kolejki i dwa bankomaty”

Saurabh Pakhare
źródło
A wielowątkowość? Wystarczy pomyśleć, jak termin wielowątkowość pasuje do powyższego scenariusza. Czy w tym przypadku jest równoczesny == Wielowątkowość, ponieważ w jednej z każdej kolejki idzie ATM na każdą chwilę?
KhoPhi
31

Wyobraź sobie, że uczysz się nowego języka programowania, oglądając samouczek wideo. Musisz zatrzymać film, zastosować to, co zostało powiedziane w kodzie, a następnie kontynuować oglądanie. To współbieżność.

Teraz jesteś profesjonalnym programistą. I lubisz słuchać spokojnej muzyki podczas kodowania. To jest równoległość.

Jak powiedział Andrew Gerrand w blogu GoLang

Współbieżność polega na radzeniu sobie z wieloma rzeczami jednocześnie. Równoległość polega na robieniu wielu rzeczy naraz.

Cieszyć się.

Ramy M. Mousa
źródło
29

Rozwiązują różne problemy. Współbieżność rozwiązuje problem niedoboru zasobów procesora i wielu zadań. Tak więc tworzysz wątki lub niezależne ścieżki wykonywania za pomocą kodu, aby dzielić czas na ograniczone zasoby. Do niedawna w dyskusji dominowała współbieżność ze względu na dostępność procesora.

Równoległość rozwiązuje problem znalezienia wystarczającej liczby zadań i odpowiednich zadań (takich, które można poprawnie rozdzielić) i rozdzielenia ich na wiele zasobów procesora. Oczywiście równoległość zawsze istniała, ale wychodzi na pierwszy plan, ponieważ procesory wielordzeniowe są tak tanie.

JP Alioto
źródło
28

concurency: wiele przepływów wykonania z potencjałem do współdzielenia zasobów

Np .: dwa wątki konkurujące o port I / O.

paralelizm: podział problemu na wiele podobnych części.

Np .: parsowanie dużego pliku przez uruchomienie dwóch procesów na każdej połowie pliku.

Mihai Toader
źródło
21

Równoczesne wykonywanie programowania ma 2 typy: nierównoległe programowanie współbieżne i równoległe programowanie współbieżne (znane również jako równoległość).

Kluczową różnicą jest to, że dla ludzkiego oka wątki w nierównoległej współbieżności wydają się działać w tym samym czasie, ale w rzeczywistości tak nie jest. W nierównoległych wątkach współbieżność szybko się przełącza i na zmianę używa procesora poprzez podział czasu. Chociaż równolegle dostępnych jest wiele procesorów, wiele wątków może działać jednocześnie na różnych procesorach. wprowadź opis zdjęcia tutaj

Odniesienia: Wprowadzenie do współbieżności w językach programowania

Apurva Thorat
źródło
8
obraz wart tysiąca słów
senseiwu
21

Równoległość to jednoczesne wykonywanie procesów na a multiple cores per CPUlub multiple CPUs (on a single motherboard).

Współbieżność ma miejsce, gdy równoległość jest osiągana single core/CPUza pomocą algorytmów planowania, które dzielą czas procesora (przedział czasu). Procesy są przeplatane .

Jednostki:

  • 1 lub wiele rdzeni w jednym procesorze (prawie wszystkie współczesne procesory)
  • 1 lub wiele procesorów na płycie głównej (pomyśl o serwerach starej szkoły)
  • 1 aplikacja to 1 program (pomyśl przeglądarkę Chrome)
  • 1 program może mieć 1 lub wiele procesów (myślę, że każda karta przeglądarki Chrome jest procesem)
  • 1 proces może mieć 1 lub wiele wątków z 1 programu (karta Chrome odtwarzająca wideo z YouTube w 1 wątku, kolejny wątek pojawił się w sekcji komentarzy, inny dla danych logowania użytkowników)
  • Zatem 1 program może mieć 1 lub wiele wątków wykonania
  • 1 proces to thread(s)+allocated memory resources by OS (sterty, rejestry, stos, pamięć klas)
nabster
źródło
2
Myślę, że to idealna odpowiedź w świecie informatyki.
sofs1,
1
Ta odpowiedź powinna być zaakceptowana, a nie filozofia powyżej i poniżej
Eugen Sunic
10

Współbieżność => Gdy wiele zadań jest wykonywanych w nakładających się okresach ze współdzielonymi zasobami (potencjalnie maksymalizując wykorzystanie zasobów).

Równoległe => gdy pojedyncze zadanie jest podzielone na wiele prostych niezależnych pod-zadań, które mogą być wykonywane jednocześnie.

MBK
źródło
Jak opisałbyś system jednordzeniowy z procesorami wielozadaniowymi (przedziały czasowe), aby uzyskać wrażenie nakładającego się przetwarzania? Kiedy współbieżność jest zdefiniowana jako wykonanie w nakładających się okresach, obejmuje to przetwarzanie. Opisałeś równoczesne wykonanie, które wyklucza to w twojej definicji współbieżności.
acarlon
9

Pomyśl o tym jako o obsłudze kolejek, w której serwer może obsłużyć tylko pierwsze zadanie w kolejce.

1 serwer, 1 kolejka zadań (z 5 zadaniami) -> brak współbieżności, brak równoległości (tylko jedno zadanie jest obsługiwane do ukończenia, następne zadanie w kolejce musi poczekać do zakończenia obsługiwanego zadania i nie ma innego serwera do serwis)

1 serwer, 2 lub więcej różnych kolejek (z 5 zadaniami na kolejkę) -> współbieżność (ponieważ serwer współdzieli czas z wszystkimi 1. zadaniami w kolejkach, jednakowymi lub ważonymi), wciąż nie ma równoległości, ponieważ w każdej chwili istnieje jedna i tylko jedna praca jest serwisowana.

2 lub więcej serwerów, jedna Kolejka -> równoległość (2 zadania wykonane w tym samym momencie), ale brak współbieżności (serwer nie współdzieli czasu, trzecie zadanie musi poczekać, aż jeden z serwerów zakończy się).

2 lub więcej serwerów, 2 lub więcej różnych kolejek -> współbieżność i równoległość

Innymi słowy, współbieżność dzieli czas na wykonanie zadania, MOGĄ zająć tyle samo czasu na wykonanie zadania, ale przynajmniej zaczyna się wcześnie. Ważną rzeczą jest to, że zadania można podzielić na mniejsze zadania, co umożliwia przeplatanie.

Równoległość osiąga się dzięki większej liczbie procesorów, serwerów, ludzi itp., Które działają równolegle.

Należy pamiętać, że jeśli zasoby są dzielone, nie można osiągnąć czystego paralelizmu, ale w tym przypadku współbieżność miałaby najlepsze praktyczne zastosowanie, podejmując inne zadanie, które nie potrzebuje tego zasobu.

Rahul
źródło
7

Mam zamiar zaoferować odpowiedź, która jest trochę sprzeczna z niektórymi popularnymi odpowiedziami tutaj. Moim zdaniem współbieżność to ogólny termin obejmujący równoległość. Współbieżność ma zastosowanie w każdej sytuacji, w której różne zadania lub jednostki pracy nakładają się w czasie. Równoległość dotyczy w szczególności sytuacji, w których odrębne jednostki pracy są oceniane / wykonywane w tym samym czasie fizycznym. Racją bytu równoległości jest przyspieszenie oprogramowania, które może korzystać z wielu fizycznych zasobów obliczeniowych. Inną ważną koncepcją, która pasuje do współbieżności, jest interaktywność. Interaktywnośćma zastosowanie, gdy można zaobserwować nakładanie się zadań ze świata zewnętrznego. Racją bytu interaktywności jest tworzenie oprogramowania reagującego na rzeczywiste podmioty, takie jak użytkownicy, sieci, urządzenia peryferyjne itp.

Równoległość i interaktywność są prawie całkowicie niezależnym wymiarem współbieżności. W przypadku konkretnego projektu deweloperzy mogą dbać o jedno lub drugie. Mają tendencję do łączenia się, zwłaszcza dlatego, że obrzydliwość, która jest nitką, daje względnie dogodny prymityw do zrobienia obu.

Trochę więcej szczegółów na temat równoległości :

Równoległość występuje w bardzo małych skalach (np. Równoległość na poziomie instrukcji w procesorach), średnich (np. Procesory wielordzeniowe) i dużych (np. Klastry obliczeniowe o wysokiej wydajności). W ostatnich latach wzrosła presja na twórców oprogramowania, by ujawnili więcej równoległości na poziomie wątków, z powodu wzrostu liczby procesorów wielordzeniowych. Równoległość jest ściśle związana z pojęciem zależności . Zależności ograniczają zakres, w jakim można osiągnąć równoległość; dwa zadania nie mogą być wykonywane równolegle, jeśli jedno zależy od drugiego (ignorowanie spekulacji).

Istnieje wiele wzorców i struktur używanych przez programistów do wyrażania równoległości: potoki, pule zadań, agregacja operacji na strukturach danych („tablice równoległe”).

Trochę więcej szczegółów na temat interaktywności :

Najbardziej podstawowym i powszechnym sposobem wykonywania interaktywności są zdarzenia (tj. Pętla zdarzeń i procedury obsługi / wywołania zwrotne). Do prostych zadań wydarzenia są świetne. Próba wykonywania bardziej złożonych zadań ze zdarzeniami powoduje zgrywanie stosu (piekło wywołania zwrotnego; inwersja sterowania). Kiedy masz dość wydarzeń, możesz wypróbować bardziej egzotyczne rzeczy, takie jak generatory, coroutines (aka Async / Await) lub wątki kooperacyjne.

Z miłości do niezawodnego oprogramowania nie używaj wątków, jeśli szukasz interaktywności.

Curmudgeonility

Nie podoba mi się hasło „współbieżności Roba Pike'a nie jest paralelizmem, ale lepsze”. Współbieżność nie jest ani lepsza, ani gorsza niż równoległość. Współbieżność obejmuje interaktywność, której nie można porównać w lepszy / gorszy sposób z równoległością. To tak, jakby powiedzieć „przepływ kontroli jest lepszy niż dane”.

Ben Ylvisaker
źródło
6

W elektronice szeregowy i równoległy reprezentują rodzaj statycznej topologii, określającej rzeczywiste zachowanie obwodu. Gdy nie ma współbieżności, równoległość jest deterministyczna .

Aby opisać zjawiska dynamiczne związane z czasem , używamy terminów sekwencyjnych i współbieżnych . Na przykład pewien wynik można uzyskać poprzez pewną sekwencję zadań (np. Przepis). Kiedy rozmawiamy z kimś, tworzymy ciąg słów. Jednak w rzeczywistości wiele innych procesów zachodzi w tym samym momencie, a zatem są zgodne z faktycznym rezultatem określonego działania. Jeśli wiele osób mówi jednocześnie, równoczesne rozmowy mogą zakłócać naszą sekwencję, ale skutki tej ingerencji nie są znane z góry. Współbieżność wprowadza nieokreśloność .

Charakterystyka szeregowa / równoległa i sekwencyjna / współbieżna są ortogonalne. Przykładem tego jest komunikacja cyfrowa. W adapterze szeregowym wiadomość cyfrowa jest czasowo (tj. Sekwencyjnie ) dystrybuowana wzdłuż tej samej linii komunikacyjnej (np. Jednego drutu). W równoległym adapterze jest on podzielony również na równoległe linie komunikacyjne (np. Wiele przewodów), a następnie zrekonstruowany na końcu odbiorczym.

Wyobraźmy sobie grę z 9 dziećmi. Gdybyśmy zutylizowali je jako łańcuch, przekazali wiadomość na początku, a otrzymali na końcu, mielibyśmy komunikację szeregową. Więcej słów tworzy wiadomość, składającą się z sekwencji jedności komunikacyjnych.

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

Jest to proces sekwencyjny odtwarzany w infrastrukturze szeregowej .

Teraz wyobraźmy sobie, że dzielimy dzieci na grupy po 3 osoby. Frazę dzielimy na trzy części, pierwszą podajemy dziecku linii po lewej stronie, drugą dziecku linii środkowej itp.

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

Jest to proces sekwencyjny odtwarzany w równoległej infrastrukturze (choć wciąż częściowo zserializowany).

W obu przypadkach, zakładając, że istnieje idealna komunikacja między dziećmi, wynik jest ustalany z góry.

Jeśli są inne osoby, które rozmawiają z pierwszym dzieckiem w tym samym czasie co ty, wówczas będziemy mieli równoległe procesy . Nie wiemy, który proces zostanie rozważony przez infrastrukturę, więc ostateczny wynik nie jest z góry ustalony .

s1l3n0
źródło
+1 ciekawe. Przy obliczaniu jednej definicji, zgodnie z obecnie akceptowaną odpowiedzią, współbieżne oznacza wykonanie w nakładających się okresach, niekoniecznie jednocześnie (co byłoby równoległe). Jak w elektronice opisujesz obwody zaprojektowane tak, aby wyglądały na rzeczy dziejące się w tym samym czasie, ale przełączają się bardzo szybko. Aby kontynuować analogię do lodów: bardzo lubię lody> dziecko A1 lubię> lody dziecko B1> tak dziecko C1> bardzo dziecko A2 lubię> dziecko B2 lody <dziecko C2 tak bardzo ...
acarlon
Po raz pierwszy zobaczyłem to tutaj: s1l3n0.blogspot.com/2013/04/… .
FrankHB
Tak, poprawiłem / poszerzyłem nieco swoją odpowiedź na jednym z moich osobistych notatek na blogu. ;)
s1l3n0
5

Współbieżność jest uogólnioną formą paralelizmu. Na przykład program równoległy można również nazwać równoczesnym, ale odwrotność nie jest prawdą.

  1. Równoczesne wykonywanie jest możliwe na jednym procesorze (wiele wątków, zarządzanych przez program planujący lub pulę wątków)

  2. Wykonanie równoległe nie jest możliwe na jednym procesorze, ale na wielu procesorach. (Jeden proces na procesor)

  3. Przetwarzanie rozproszone jest również pokrewnym tematem i można je również nazwać obliczeniami współbieżnymi, ale odwrotność nie jest prawdą, podobnie jak równoległość.

Szczegółowe informacje można znaleźć w niniejszym dokumencie badawczym Koncepcje programowania współbieżnego


źródło
5

Naprawdę podobała mi się ta reprezentacja graficzna z innej odpowiedzi - myślę, że odpowiada ona na pytanie znacznie lepiej niż wiele z powyższych odpowiedzi

Równoległość a współbieżność Gdy dwa wątki pracują równolegle, oba działają jednocześnie. Na przykład, jeśli mamy dwa wątki, A i B, ich równoległe wykonanie wyglądałoby tak:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

Gdy dwa wątki działają jednocześnie, ich wykonanie nakłada się. Nakładanie się może odbywać się na jeden z dwóch sposobów: albo wątki wykonują się w tym samym czasie (tj. Równolegle, jak powyżej), lub ich wykonania są przeplatane na procesorze, tak jak:

CPU 1: A -----------> B ----------> A -----------> B -------- ->

Dlatego dla naszych celów równoległość można traktować jako szczególny przypadek współbieżności

Źródło: inna odpowiedź tutaj

Mam nadzieję, że to pomaga.

HopeKing
źródło
4

Naprawdę podoba mi się odpowiedź Paula Butchera na to pytanie (jest on autorem siedmiu modeli współbieżności w siedmiu tygodniach ):

Chociaż często są mylone, równoległość i współbieżność to różne rzeczy. Współbieżność jest aspektem domeny problemowej - kod musi obsługiwać wiele jednoczesnych (lub prawie równoczesnych) zdarzeń . Natomiast równoległość jest aspektem domeny rozwiązania - chcesz przyspieszyć działanie programu, przetwarzając równolegle różne części problemu. Niektóre podejścia mają zastosowanie do współbieżności, niektóre do równoległości, a niektóre do obu. Zrozum, z kim masz do czynienia, i wybierz odpowiednie narzędzie do pracy.

dangom
źródło
3

Współbieżność może obejmować zadania uruchamiane jednocześnie lub nie (mogą być uruchomione w osobnych procesorach / rdzeniach, ale równie dobrze mogą być uruchamiane w „tikach”). Co jest ważne jest to, że zawsze odnoszą się do współbieżności robi kawałek jednego zadania większej . Zasadniczo jest to część niektórych obliczeń. Musisz być mądry, co możesz robić jednocześnie, a czego nie i jak synchronizować.

Równoległość oznacza, że ​​robisz kilka rzeczy jednocześnie. Nie muszą brać udziału w rozwiązywaniu jednego problemu. Twoje wątki mogą na przykład rozwiązać jeden problem. Oczywiście synchronizacja ma również zastosowanie, ale z innej perspektywy.

kboom
źródło
3

„Współbieżność” jest wtedy, gdy istnieje wiele rzeczy w toku .

„Równoległość” jest wtedy, gdy rzeczy są współbieżne postępuje w tym samym czasie .


Przykłady współbieżności bez równoległości:

  • Wiele wątków na jednym rdzeniu.
  • Wiele wiadomości w kolejce komunikatów Win32.
  • Wiele SqlDataReaders na połączeniu MARS .
  • Wiele obietnic JavaScript w zakładce przeglądarki.

Należy jednak pamiętać, że różnica między współbieżnością a równoległością jest często kwestią perspektywy. Powyższe przykłady nie są równoległe z punktu widzenia (możliwych do zaobserwowania efektów) wykonania kodu. Ale istnieje równoległość na poziomie instrukcji, nawet w obrębie jednego rdzenia. Istnieją elementy sprzętowe, które działają równolegle z procesorem, a następnie przerywają procesor po zakończeniu. GPU może rysować na ekranie podczas wykonywania procedury okna lub procedury obsługi zdarzenia. DBMS może przechodzić przez B-Drzewa dla następnego zapytania, podczas gdy nadal pobierasz wyniki poprzedniego. Przeglądarka może wykonywać układ lub sieci podczas Promise.resolve()wykonywania. Itd itd...

Więc proszę bardzo. Świat jest tak brudny jak zawsze;)

Branko Dimitrijevic
źródło
3

Moim zdaniem jest to najprostszy i najbardziej elegancki sposób zrozumienia tych dwóch. Współbieżność umożliwia przeplatanie wykonania, a zatem może dać złudzenie równoległości. Oznacza to, że współbieżny system może na przykład wyświetlać wideo w YouTube wraz z pisaniem dokumentu w programie Word. Podstawowy system operacyjny, będący systemem współbieżnym, umożliwia tym zadaniom przeplatanie ich wykonania. Ponieważ komputery wykonują instrukcje tak szybko, daje to wrażenie wykonywania dwóch rzeczy jednocześnie.

Równoległość ma miejsce, gdy takie rzeczy naprawdę równoległe. W powyższym przykładzie może się okazać, że kod przetwarzania wideo jest wykonywany na jednym rdzeniu, a aplikacja Word działa na innym. Zauważ, że oznacza to, że program równoległy może być również równoległy! Strukturyzacja aplikacji za pomocą wątków i procesów umożliwia programowi wykorzystanie podstawowego sprzętu i potencjalne wykonanie go równolegle.

Dlaczego więc nie wszystko ma być równoległe? Jednym z powodów jest to, że współbieżność jest sposobem strukturyzacji programów i stanowi decyzję projektową ułatwiającą rozdzielenie problemów, podczas gdy równoległość jest często używana w imię wydajności. Innym jest to, że niektórych rzeczy zasadniczo nie można w pełni zrobić równolegle. Przykładem może być dodanie dwóch rzeczy na końcu kolejki - nie można wstawić obu jednocześnie. Coś musi iść najpierw, a drugie za tym, bo inaczej zepsujesz kolejkę. Chociaż możemy przeplatać takie wykonanie (a więc otrzymujemy współbieżną kolejkę), nie możesz mieć równoległej.

Mam nadzieję że to pomoże!

Daniel Soutar
źródło
3

Programowanie współbieżne dotyczy operacji, które wydają się nakładać na siebie i dotyczy przede wszystkim złożoności wynikającej z niedeterministycznego przepływu sterowania. Koszty ilościowe związane z równoległymi programami to zazwyczaj zarówno przepustowość, jak i opóźnienie. Współbieżne programy są często związane z operacjami wejścia-wyjścia, ale nie zawsze, np. Współbieżne moduły śmieciarek są całkowicie oparte na procesorze. Pedagogicznym przykładem współbieżnego programu jest przeszukiwacz sieci. Ten program inicjuje żądania stron internetowych i akceptuje odpowiedzi jednocześnie, gdy wyniki pobrań stają się dostępne, gromadząc zestaw stron, które już odwiedzono. Przepływ sterowania jest niedeterministyczny, ponieważ odpowiedzi niekoniecznie są odbierane w tej samej kolejności przy każdym uruchomieniu programu. Ta cecha może bardzo utrudnić debugowanie współbieżnych programów. Niektóre aplikacje są zasadniczo współbieżne, np. Serwery WWW muszą jednocześnie obsługiwać połączenia klientów. Erlang jest prawdopodobnie najbardziej obiecującym językiem dla wysoce współbieżnego programowania.

Programowanie równoległe dotyczy operacji, które nakładają się na siebie w ramach konkretnego celu, jakim jest poprawa przepustowości. Trudności z równoczesnym programowaniem można uniknąć, czyniąc deterministyczny przepływ sterowania. Zazwyczaj programy spawnują zestawy zadań potomnych, które działają równolegle, a zadanie nadrzędne jest kontynuowane dopiero po zakończeniu każdego podzadania. To znacznie ułatwia debugowanie programów równoległych. Trudną częścią programowania równoległego jest optymalizacja wydajności w odniesieniu do takich kwestii, jak ziarnistość i komunikacja. Ta ostatnia kwestia wciąż stanowi problem w kontekście wielopłaszczyznowych, ponieważ przesyłanie danych z jednej pamięci podręcznej do drugiej wiąże się ze znacznymi kosztami. Mnożenie macierzy gęstej macierzy jest pedagogicznym przykładem programowania równoległego i można ją skutecznie rozwiązać za pomocą Straasen ' Algorytm „dziel i rządź” i równolegle atakując pod-problemy. Cilk jest prawdopodobnie najbardziej obiecującym językiem do wysokowydajnego programowania równoległego na komputerach z pamięcią współużytkowaną (w tym multicores).

Skopiowano z mojej odpowiedzi: https://stackoverflow.com/a/3982782

Jon Harrop
źródło
2

Równoległość: wiele wątków wykonuje podobne zadania, które są od siebie niezależne pod względem wymaganych danych i zasobów. Np .: robot Google może odrodzić tysiące wątków, a każdy wątek może wykonać swoje zadanie niezależnie.

Współbieżność: Współbieżność pojawia się, gdy masz wspólne dane, wspólne zasoby między wątkami. W systemie transakcyjnym oznacza to, że musisz zsynchronizować krytyczną część kodu za pomocą niektórych technik, takich jak zamki, semafory itp.

Sudip Bhandari
źródło
To powinna być zaakceptowana odpowiedź IMO, ponieważ oddaje istotę obu terminów.
michid
2

(Jestem zaskoczony, że tak fundamentalne pytanie nie jest rozwiązywane poprawnie i starannie przez lata ...)

Krótko mówiąc, zarówno współbieżność, jak i równoległość są właściwościami obliczeniowymi .

Różnica polega na wyjaśnieniu Roberta Harpera :

Pierwszą rzeczą do zrozumienia jest to, że paralelizm nie ma nic wspólnego ze współbieżnością . Współbieżność dotyczy niedeterministycznego składu programów (lub ich składników). Równoległość dotyczy asymptotycznej wydajności programów deterministycznych zachowaniu. Współbieżność polega na zarządzaniu niemożliwym do zarządzania: zdarzenia przychodzą z przyczyn od nas niezależnych i musimy na nie reagować. Użytkownik klika myszą, menedżer okien musi odpowiedzieć, nawet jeśli ekran wymaga uwagi. Takie sytuacje są z natury niedeterministyczne, ale stosujemy również pro formaniedeterminizm w deterministycznym otoczeniu, udając, że komponenty sygnalizują zdarzenia w dowolnej kolejności i że musimy na nie reagować w miarę ich powstawania. Niedeterministyczna kompozycja jest potężnym pomysłem na strukturę programu. Z drugiej strony równoległość polega na zależnościach między podliczeniami obliczeń deterministycznych. Wynik nie budzi wątpliwości, ale istnieje wiele sposobów jego osiągnięcia, niektóre bardziej wydajne niż inne. Chcemy wykorzystać te możliwości na naszą korzyść.

Mogą być rodzajem właściwości ortogonalnych w programach. Przeczytaj ten post na blogu, aby uzyskać dodatkowe ilustracje. A ten omawiał nieco więcej na temat różnic w komponentach w programowaniu , takich jak wątki.

Należy pamiętać, że wątki lub wielozadaniowość to wszystkie implementacje komputerów służące bardziej konkretnym celom. Mogą być powiązane z równoległością i współbieżnością, ale nie w istotny sposób. Dlatego nie są to dobre wpisy, aby rozpocząć wyjaśnienie.

Jeszcze jedna uwaga: (fizyczny) „czas” nie ma prawie nic wspólnego z omawianymi tutaj właściwościami. Czas jest tylko sposobem realizacji pomiaru, aby pokazać znaczenie właściwości, ale dalekie od istoty. Pomyśl dwukrotnie o roli „czasu” w złożoności czasu - która jest mniej więcej podobna, nawet pomiar jest w tym przypadku często bardziej znaczący.

FrankHB
źródło
2

„Współbieżne” robi rzeczy - wszystko - jednocześnie. Mogą to być różne rzeczy lub to samo. Pomimo przyjętej odpowiedzi, której brakuje, nie chodzi o to, by „wydawać się być jednocześnie”. To naprawdę w tym samym czasie. Aby uruchomić współbieżny kod, potrzebujesz wielu rdzeni procesora, wykorzystujących pamięć współdzieloną na jednym hoście lub pamięć rozproszoną na różnych hostach. Przykładem są potoki 3 różnych zadań, które są jednocześnie uruchomione: Zadanie na poziomie 2 musi czekać na jednostki ukończone przez zadanie na poziomie 1, a zadanie na poziomie 3 musi czekać na jednostki pracy ukończone przez poziom zadania-2. Innym przykładem jest współbieżność 1 producenta z 1 konsumentem; lub wielu producentów i 1 konsument; czytelnicy i pisarze; i in.

„Parallel” robi te same rzeczy w tym samym czasie. Jest to współbieżne, ale ponadto to samo zachowanie dzieje się w tym samym czasie, a najczęściej na różnych danych. Algebra macierzy może być często zrównoleglona, ​​ponieważ powtarzana jest ta sama operacja: na przykład sumy kolumn macierzy można obliczyć w tym samym czasie, stosując to samo zachowanie (sumę), ale w różnych kolumnach. Powszechną strategią jest dzielenie (dzielenie) kolumn między dostępne rdzenie procesorów, aby uzyskać prawie taką samą ilość pracy (liczbę kolumn) obsługiwaną przez każdy rdzeń procesora. Innym sposobem na podzielenie pracy jest zestaw zadań, w którym pracownicy, którzy kończą pracę, wracają do kierownika, który wręcza pracę i dynamicznie wykonuje więcej pracy, dopóki wszystko się nie skończy. Algorytm sprzedaży biletów jest kolejnym.

Nie tylko kod numeryczny może być zrównoleglony. Pliki zbyt często mogą być przetwarzane równolegle. W aplikacji do przetwarzania języka naturalnego dla każdego z milionów plików dokumentów może być konieczne policzenie liczby tokenów w dokumencie. Jest to równoległe, ponieważ dla każdego pliku liczone są tokeny, czyli takie samo zachowanie.

Innymi słowy, równoległość występuje wtedy, gdy to samo zachowanie jest wykonywane jednocześnie. Jednocześnie oznacza to jednocześnie, ale niekoniecznie to samo zachowanie. Równoległość jest szczególnym rodzajem współbieżności, w którym dzieje się to samo w tym samym czasie.

Warunki obejmują na przykład instrukcje atomowe, sekcje krytyczne, wzajemne wykluczanie, oczekiwanie na spin, semafory, monitory, bariery, przekazywanie wiadomości, redukowanie mapy, bicie serca, dzwonek, algorytmy biletowe, wątki, MPI, OpenMP.

Praca Gregory'ego Andrewsa jest najlepszym podręcznikiem na ten temat: programowanie wielowątkowe, równoległe i rozproszone.

Geoffrey Anderson
źródło
1

Świetnie, pozwól mi wziąć scenariusz, aby pokazać, co rozumiem. załóżmy, że są 3 dzieci o imieniu: A, B, C. A i B rozmawiają, C słuchają. W przypadku A i B są one równoległe: A: Jestem A. B: Jestem B.

Ale dla C jego mózg musi podjąć równoległy proces, aby słuchać A i B, może to: Jestem IA jestem B.

mannnnerd
źródło
1

Prosta współbieżność oznacza, że ​​działa więcej niż jedno zadanie (niekoniecznie równolegle). Załóżmy na przykład, że mamy 3 zadania w dowolnym momencie: więcej niż jedno może działać lub wszystkie mogą być uruchomione w tym samym czasie.

Równoległość oznacza, że ​​dosłownie działają równolegle. W takim przypadku wszystkie trzy muszą działać jednocześnie.

akhil_mittal
źródło
1

Pojęcie „współbieżności” przez Pike jest celową decyzją dotyczącą projektu i wdrożenia. Współbieżna konstrukcja programu może, ale nie musi, wykazywać behawioralny „paralelizm”; zależy to od środowiska wykonawczego.

Nie chcesz równoległości wykazywanej przez program, który nie został zaprojektowany dla współbieżności. :-) Ale w takim stopniu, w jakim jest to zysk netto dla odpowiednich czynników (zużycie energii, wydajność itp.), Chcesz maksymalnie współbieżnego projektu, aby system hosta mógł równolegle wykonywać swoje działania, gdy to możliwe.

Język programowania Pike's Go ilustruje to w skrajności: wszystkie jego funkcje to wszystkie wątki, które mogą działać poprawnie jednocześnie, tj. Wywołanie funkcji zawsze tworzy wątek, który będzie działał równolegle z wywołującym, jeśli system jest w stanie to zrobić. Aplikacja z setkami, a nawet tysiącami wątków jest zupełnie zwyczajna w jego świecie. (Nie jestem ekspertem od Go, to tylko moje zdanie.)

bgat
źródło