Co oznacza Rob Pike
Kiedy masz abstrakcyjną formę algorytmu w umyśle, wtedy trzeba wybrać, czy będzie wdrożyć go z Message Passing lub Shared Memory lub może hybrydową. Będziesz musiał również wziąć pod uwagę rodzaj dostępu do pamięci (NUMA, UMA, itp.) I używaną topologię (Hypercube, Torus, Ring, Mesh, Tree, itp.).
To wydaje się dużo pracy komuś, kto tylko chce coś, może nawet prostego, wykonanego w sposób równoległy (np.
I to dużo pracy, zwłaszcza jeśli zmienisz topologię (abyś mógł mieć wszystkie zalety).
Zapisujesz kod równoległy (czy to prosty czy złożony), a VM lub kompilator wybierze to, co wydaje się być najlepszym sposobem, , nawet uruchamiając go sekwencyjnie! (przykładem może być Task Parallel Library for .NET)
Ważne EDIT:
należy wspomnieć, że mówię o współbieżności w program/algorytm, a nie między niezależnymi programów uruchamianych w systemie .
Mówiłeś, że
Jest dobrze zrozumiałe, że współbieżności jest dekompozycja złożonego problemu na mniejsze części. Jeśli nie można prawidłowo podzielić coś na mniejsze części, trudno go rozwiązać za pomocą współbieżności
ale jest źle b/c te mniejsze elementy mogą zależeć od siebie w sposób sekwencyjny zakończenia, więc nawet jeśli dzielisz się na małe komponenty, nie oznacza to, że osiągasz współbieżność/równoległość.
We wszystkich moich klas algorytmów równoległych i rozproszonych (zarówno w BS i MS) nigdy nie mówił o „współbieżności uzyskaliśmy a teraz zobaczmy, w jaki sposób uzyskać równoległość”. Jeśli używasz słowa współbieżność do opisu i algorytmu, oznacza to paralelizm i na odwrót.
W literaturze można również znaleźć cienką linię między rozproszoną i równoległą.
Z algorytmu punktu widzenia można używać współbieżności, równoległości i rozproszone i otrzymujesz ten sam pomysł.
Z punktu widzenia wdrożenia, jeśli mówisz "paralelizm", zazwyczaj planujesz program działający na komputerze lokalnym lub klastrze (komunikacja z dzieloną pamięcią) i "dystrybuowany" po uruchomieniu programu na siatce (Wiadomość przekazująca wiadomość).
Teraz zarówno rozproszony, jak i równoległy oznacza współbieżność.
Myślę, że powinieneś być bardziej sceptyczny co do dokładnego znaczenia tych terminów, ponieważ nawet w literaturze (i mówię o ludziach, którzy rzeczywiście przyczynili się do tej dziedziny, a nie tylko do stworzenia jakiegoś języka), są oni wykorzystywani do wyrażania abstrakcyjna koncepcja.
Współbieżność na algorytmie (czy to program) oznacza posiadanie fragmentów kodu, które mogą działać niezależnie od innych fragmentów kodu, nawet jeśli w końcu będą czekać na inne fragmenty kodu (sprawdź Prawo Amdahla, aby zobaczyć dokładnie implikację tego).
Zawsze, gdy masz współbieżność w algorytmie/programie, masz również równoległość.
Myślę, że lepiej jest zaimplementować kilka równoległych i rozproszonych algorytmów, aby lepiej zrozumieć ideę, która za tym stoi. Jeśli znasz C/C++, możesz użyć OpenMPI dla implementacji rozproszonych (Message Passing) i OpenMP dla równoległych (Shared Memory) implementacji.
EDIT:
Mógł również oznaczać współbieżność jako abstrakcyjnej zasady i równolegle jako sposób jest realizowany [Shared Memory Message Passing, hybryda obu; Typ dostępu do pamięci (numa, uma itp.)].
Tutaj jest trochę za dużo miejsca na dyskusję otwartą. Pytałem modów programu Programmer.SE, czy to będzie działać tam. Dzięki. – Kev