W wielu dziedzinach słowa współbieżny i równoległy są używane synonimicznie, ale nie tak w programowaniu, gdzie opisują zasadniczo różne pojęcia.

Co to jest współbieżność (Concurrent Computing)?

Concurrent Computing to współbieżne (jednoczesne) wykonywanie wielu zadań obliczeniowych w nakładających się okresach czasu zamiast sekwencyjnie. Jest to zdolność systemu do wykonywania kilku obliczeń jednocześnie lub w nakładających się przedziałach czasowych. Współbieżność ma zasadniczo zastosowanie, gdy mówimy o więcej niż jednym zadaniu w tym samym czasie. Zadania te mogą być realizowane jako oddzielne programy lub jako zestaw procesów lub wątków tworzonych przez jeden program. Zadania mogą być wykonywane na jednym procesorze, wielu procesorach lub rozproszone w sieci.

Obliczenia współbieżne są powiązane z obliczeniami równoległymi, ale bardziej skupiają się na interakcjach między zadaniami. Współbieżność odnosi się do wykonywania wielu zadań w tym samym czasie, ale nie musi oznaczać jednocześnie. To, czy zadania wykonują się w tym samym czasie, czy nie, jest szczegółem implementacji. Zadanie może być wykonywane na jednym procesorze poprzez przerwane wykonywanie lub na wielu fizycznych procesorach. Powszechnym przykładem współbieżności jest program obliczający sumę dużej listy liczb.

Co to jest obliczenie równoległe?

Obliczenia równoległe to proces jednoczesnego wykonywania wielu zadań obliczeniowych poprzez delegowanie różnych części obliczeń do różnych procesorów, które wykonują je w tym samym czasie. Program równoległy wykorzystuje kilka rdzeni procesora do szybszego wykonywania obliczeń. Fizycznie uruchamia części zadań lub wiele zadań w tym samym czasie przy użyciu wielu procesorów. Umożliwia pojedynczym sekwencyjnym procesorom wykonywanie wielu rzeczy pozornie jednocześnie. Paralelizm jest realizacją programu współbieżnego.

W systemie wielordzeniowym wiele programów może faktycznie robić postępy w tym samym czasie bez pomocy systemu operacyjnego, aby zapewnić plasterkowanie czasu. Jeśli uruchomisz, powiedzmy, dwa procesy w systemie dwurdzeniowym i przydzielisz jeden rdzeń na proces, oba będą wykonywać się w tym samym czasie. To jest to, co można nazwać wykonywaniem równoległym. Obliczenia równoległe zasadniczo wymagają sprzętu z wieloma jednostkami obliczeniowymi. Jest to równoczesne wykonywanie obliczeń, ewentualnie powiązanych, ale niekoniecznie.

Różnica między obliczeniami współbieżnymi a równoległymi

Definicja

– Obliczenia współbieżne to forma obliczeń, w której dwa lub więcej zadań obliczeniowych działa i wykonuje się w nakładających się okresach czasu zamiast sekwencyjnie. Współbieżność ma zasadniczo zastosowanie, gdy mówisz o więcej niż jednym zadaniu w tym samym czasie. Obliczenia równoległe, z drugiej strony, to rodzaj architektury obliczeniowej, w której wiele zasobów obliczeniowych jest używanych jednocześnie do rozwiązania problemu obliczeniowego.

Egzekucja

– W obliczeniach współbieżnych zadania mogą być wykonywane na jednym procesorze, wielu procesorach lub rozproszone w sieci. Zadanie może być wykonywane na jednym procesorze poprzez wykonanie z przeplotem lub na wielu procesorach fizycznych. Program równoległy wykorzystuje kilka rdzeni procesora do szybszego wykonywania obliczeń. Fizycznie uruchamia części zadań lub wiele zadań w tym samym czasie przy użyciu wielu procesorów. Współbieżność odnosi się do wykonywania wielu zadań w tym samym czasie, ale niekoniecznie jednocześnie.

Moc przetwarzania

– Współbieżność polega na tym, że w programie występuje wiele wątków sterowania. Koncepcyjnie, te wątki sterowania wykonują się w tym samym czasie; to znaczy, że można zobaczyć ich efekty przeplatające się. Program równoległy to taki, który wykorzystuje kilka rdzeni procesora do szybszego wykonywania obliczeń. Celem jest delegowanie różnych części obliczeń do różnych procesorów, które wykonują się w tym samym czasie.

Model

– Programy współbieżne mają często charakter niedeterministyczny, co oznacza, że mają tendencję do dawania różnych wyników w oparciu o precyzyjny czas zdarzeń. Program współbieżny może działać inaczej w różnych uruchomieniach, ponieważ muszą działać razem z zewnętrznymi agentami, którzy wywołują zdarzenia w nieprzewidywalnym czasie. Programy równoległe używają modelu deterministycznego, ponieważ celem jest szybsze uzyskanie odpowiedzi. Model deterministyczny oznacza, że każdy program może dać tylko jeden wynik przez cały czas.



Podsumowanie

W dużym uproszczeniu obliczenie współbieżne oznacza, że program lub zadanie może obsługiwać wiele obliczeń w tym samym czasie, ale niekoniecznie jednocześnie. Jest to proces wykonywania obliczeń niezależnie od siebie. Z kolei obliczenia równoległe odnoszą się do jednoczesnego wykonywania dwóch lub więcej obliczeń na różnych procesorach. Można powiedzieć, że wszystkie obliczenia równoległe są współbieżne, ale nie na odwrót. Obliczenia równoległe nie są możliwe z pojedynczym procesorem; zamiast tego wymagają konfiguracji wielordzeniowej.

Czy Async jest współbieżny?

Async jest modelem programowania, podczas gdy współbieżny jest sposobem wykonywania zadań. Operacje asynchroniczne są często określane jako współbieżne, tylko wtedy, gdy dzielą zasoby. W async nigdy nie wiadomo, które zadania zostaną uruchomione jako pierwsze. Tak więc nie ma tu współbieżności.