Jaka jest różnica między współbieżnością, równoległością i metodami asynchronicznymi?


177

Współbieżność polega na tym, że dwa zadania są uruchamiane równolegle w oddzielnych wątkach. Jednak metody asynchroniczne działają równolegle, ale w tym samym 1 wątku. Jak to się osiąga? A co z równoległością?

Jakie są różnice między tymi 3 koncepcjami?


8
Termin „asynchroniczny” może oznaczać wiele różnych rzeczy. Te terminy są ze sobą powiązane, ale nie opisują rozłącznych zbiorów rzeczy. Znaczenia nakładają się i różnią się w zależności od sytuacji.
Pointy

2
Zatem pierwsza współbieżność oznacza jednoczesne uruchamianie dwóch lub więcej procesów. Po usunięciu tego faktu bycie współbieżnym nie jest równoległe. Procesy równoległe wymagają dwóch lub więcej rdzeni, podczas gdy procesy współbieżne mogą w czasie dzielić jeden rdzeń.
Rick O'Shea,

Odpowiedzi:


139

Współbieżność i równoległość są w rzeczywistości tą samą zasadą, jak słusznie przypuszczasz, obie dotyczą zadań wykonywanych jednocześnie, chociaż powiedziałbym, że zadania równoległe powinny być naprawdę wielozadaniowe, wykonywane „w tym samym czasie”, podczas gdy współbieżne mogą oznaczać, że zadania dzielą wątek wykonywania, podczas gdy nadal wydaje się być wykonywany równolegle.

Metody asynchroniczne nie są bezpośrednio związane z poprzednimi dwoma koncepcjami, asynchronia jest używana do przedstawienia wrażenia współbieżnego lub równoległego wykonywania zadań, ale efektywne wywołanie metody asynchronicznej jest zwykle używane w przypadku procesu, który musi działać z dala od bieżącej aplikacji, a my nie nie chcę czekać i blokować naszej aplikacji oczekującej na odpowiedź.

Na przykład pobieranie danych z bazy danych może zająć trochę czasu, ale nie chcemy blokować naszego interfejsu użytkownika w oczekiwaniu na dane. Wywołanie asynchroniczne pobiera odwołanie zwrotne i zwraca wykonanie z powrotem do kodu, gdy tylko żądanie zostanie umieszczone w systemie zdalnym. Twój interfejs użytkownika może nadal odpowiadać użytkownikowi, podczas gdy system zdalny wykonuje wszelkie wymagane przetwarzanie, po zwróceniu danych do metody wywołania zwrotnego, ta metoda może odpowiednio zaktualizować interfejs użytkownika (lub przekazać tę aktualizację).

Z punktu widzenia użytkownika wygląda to na wielozadaniowość, ale być może tak nie jest.


EDYTOWAĆ

Prawdopodobnie warto dodać, że w wielu implementacjach asynchroniczne wywołanie metody spowoduje rozpędzenie wątku, ale nie jest to konieczne, tak naprawdę zależy od wykonywanej operacji i tego, jak odpowiedź może zostać powiadomiona z powrotem do systemu.


34
Twierdzę, że w pierwszym akapicie pomieszano równoległość i współbieżność. Współbieżność odnosi się do zarządzania wieloma wątkami wykonywania, gdzie równoległość oznacza w szczególności wiele wątków wykonywania wykonywanych jednocześnie. Współbieżność to szerszy termin, który może obejmować paralelizm.
Mark H

7
Chociaż te dwa słowa są bardzo podobne i mogą być mylone (i często są), mają różne definicje: Współbieżny = Istniejący, wydarzający się lub wykonany w tym samym czasie. Równoległe = lub odnoszące się do pozornego lub rzeczywistego wykonywania więcej niż jednej operacji na raz przez te same lub różne urządzenia. Jak widać, równoległość niekoniecznie oznacza współbieżność, ale może po prostu sprawiać wrażenie współbieżnej. Pod koniec dnia te słowa są często używane zamiennie, a n dev oznacza pokój, prawdopodobnie otrzymasz definicje n + 1 ;)
Lazarus

3
@Mehrdad Jeśli zamierzasz oprzeć swoje definicje słów słownikowych na ich użyciu w materiałach marketingowych, to myślę, że prawdopodobnie znajdziesz się w niekorzystnej sytuacji.
Lazarus

6
Źle. W kontekście programowania współbieżność to zdolność do „skomponowania” kodu w bity logiki, które mogą być uruchamiane w tym samym czasie. Równoległość (w połączeniu z współbieżnością) polega na pobieraniu wspomnianego kodu i uruchamianiu go na 100-rdzeniowej maszynie.
Frank Radocaj

2
@FrankRadocaj ma rację. Współbieżny oznacza, że ​​program można podzielić na jednostki (jednostki zasadniczo będące wątkami), które można uruchomić w dowolnej kolejności i mieć określony wynik. Równoległe oznacza, że ​​te jednostki / wątki są uruchamiane dosłownie w tym samym czasie na wielu procesorach.

89

W skrócie,

Współbieżność oznacza wiele zadań, które są uruchamiane, uruchamiane i kończone w nakładających się okresach bez określonej kolejności. Równoległość występuje wtedy, gdy wiele zadań LUB kilka części jednego zadania jest wykonywanych dosłownie w tym samym czasie, np. Na procesorze wielordzeniowym.

Pamiętaj, że współbieżność i równoległość to NIE to samo.

Różnice między współbieżnością a równoległością

Teraz wypiszmy niezwykłe różnice między współbieżnością a równoległością.

Współbieżność występuje wtedy, gdy dwa zadania mogą zostać uruchomione, uruchomione i zakończone w nakładających się okresach. Równoległość występuje wtedy, gdy zadania są wykonywane dosłownie w tym samym czasie, np. na wielordzeniowym procesorze.

Współbieżność to kompozycja niezależnie wykonujących się procesów, podczas gdy równoległość to jednoczesne wykonywanie (prawdopodobnie powiązanych) obliczeń.

Współbieżność polega na radzeniu sobie z wieloma rzeczami naraz. Paralelizm polega na robieniu wielu rzeczy naraz.

Aplikacja może być współbieżna - ale nie równoległa, co oznacza, że ​​w tym samym czasie przetwarza więcej niż jedno zadanie, ale żadne dwa zadania nie są wykonywane w tym samym czasie.

Aplikacja może być równoległa - ale nie współbieżna, co oznacza, że ​​w tym samym czasie przetwarza wiele pod-zadań zadania w wielordzeniowym procesorze.

Aplikacja nie może być ani równoległa, ani współbieżna, co oznacza, że ​​przetwarza wszystkie zadania po kolei, po kolei.

Aplikacja może być zarówno równoległa, jak i współbieżna, co oznacza, że ​​przetwarza wiele zadań jednocześnie w wielordzeniowym procesorze w tym samym czasie.

Konkurencja

Współbieżność ma zasadniczo zastosowanie, gdy mówimy o co najmniej dwóch zadaniach. Gdy aplikacja jest w stanie wykonywać dwa zadania praktycznie w tym samym czasie, nazywamy ją aplikacją współbieżną. Chociaż tutaj zadania wyglądają jak jednocześnie, ale zasadniczo MOGĄ nie. Korzystają z funkcji dzielenia czasu procesora w systemie operacyjnym, w której każde zadanie uruchamia część swojego zadania, a następnie przechodzi w stan oczekiwania. Gdy pierwsze zadanie jest w stanie oczekiwania, procesor jest przypisywany do drugiego zadania, aby zakończyć jego część.

System operacyjny na podstawie priorytetu zadań, przydziela w ten sposób procesor i inne zasoby obliczeniowe, np. Pamięć; po kolei do wszystkich zadań i daj im szansę na wykonanie. Dla użytkownika końcowego wydaje się, że wszystkie zadania działają równolegle. Nazywa się to współbieżnością.

Równoległość

Równoległość nie wymaga istnienia dwóch zadań. Dosłownie fizycznie uruchamia części zadań LUB wiele zadań, korzystając jednocześnie z wielordzeniowej infrastruktury procesora, przypisując jeden rdzeń do każdego zadania lub podzadania.

Równoległość zasadniczo wymaga sprzętu z wieloma jednostkami przetwarzania. W przypadku jednordzeniowego procesora możesz uzyskać współbieżność, ale NIE równoległość.

Metody asynchroniczne

Nie jest to związane z współbieżnością i równoległością, asynchroniczność jest używana do przedstawienia wrażenia współbieżnego lub równoległego wykonywania zadań, ale efektywne wywołanie metody asynchronicznej jest zwykle używane w przypadku procesu, który musi działać z dala od bieżącej aplikacji, a my nie chcemy poczekaj i zablokuj naszą aplikację w oczekiwaniu na odpowiedź.


2
Bardzo pomocne. Dzięki
Neha,

Nadal nie mam wątpliwości co do współbieżności Async i współbieżności. Widziałem używane wyrażenia „uruchamianie zadań asynchronicznie” i „wykonywanie zadań jednocześnie”. Wydaje się, że uruchamianie zadań asynchronicznych i wykonywanie zadań jednocześnie oznacza to samo?
Moondra

1
@Moondra Async zadanie działa w jednym wątku, nic nie jest związane z wielowątkowością. zadanie async wysyła zadanie do zewnętrznego procesu poza twoją aplikacją ... tj. bazy danych, czytnika plików ... są to procesy IO, po czym do procesu dodawane jest wywołanie zwrotne w celu wykonania akcji po zakończeniu procesu IO. nie jestem pewien, czy istnieją pewne funkcje "asynchroniczne" w jakimś języku programowania, które tworzą osobny nowy wątek podczas wywoływania zadania asynchronicznego. Słyszałem, że C # jest jednym, ale nie jestem tego pewien
Tobi Owolawi

56

Współbieżność występuje wtedy, gdy wykonywanie wielu zadań jest przeplatane, zamiast wykonywania każdego zadania sekwencyjnie, jedno po drugim.

Równoległość występuje wtedy, gdy te zadania są faktycznie wykonywane równolegle.

wprowadź opis obrazu tutaj


Asynchronia to osobna koncepcja (choć powiązana w niektórych kontekstach). Odnosi się do faktu, że jedno wydarzenie może mieć miejsce w innym czasie (nie w synchronizacji) z innym wydarzeniem. Poniższe diagramy ilustrują różnicę między wykonaniem synchronicznym i asynchronicznym, w którym aktorzy mogą odpowiadać różnym wątkom, procesom, a nawet serwerom.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj


6
Prosta, skuteczna ilustracja.
contactmatt

1
czy współbieżność jest tym samym, co asynchronia?
nr

1
Te dwie koncepcje są rzeczywiście bardzo bliskie, ale nie takie same. W praktyce asynchronia jest bardziej związana z interakcją między akcjami (powiedzmy A i B), gdzie jedno (B) jest wyzwalane przez drugie (A) i czy drugie będzie czekało na zakończenie pierwszego. Współbieżność jest bardziej ogólnym terminem określającym akcje, które również mogą być ze sobą niezwiązane i czy są wykonywane po kolei, czy też ich wykonania są przeplatane.
Dimos

1
Tak więc asynchroniczność polega głównie na blokowaniu i nieblokowaniu
Daniel

15

Wszyscy mają problemy z kojarzeniem asynchroniczności z równoległością lub współbieżnością, ponieważ asynchroniczność nie jest antonimem ani do równoległości, ani do współbieżności. Jest to antonim Synchronous. Co po prostu wskazuje, czy coś, w tym przypadku wątki, zostanie zsynchronizowane z czymś innym, w tym przypadku innym wątkiem.


13

Istnieje kilka scenariuszy, w których może wystąpić współbieżność:

Asynchronia - oznacza to, że program wykonuje operacje nieblokujące. Na przykład może zainicjować żądanie zdalnego zasobu za pośrednictwem protokołu HTTP, a następnie wykonać inne zadanie, czekając na otrzymanie odpowiedzi. To trochę tak, jakbyś wysyłał e-mail, a potem kontynuował swoje życie bez czekania na odpowiedź.

Równoległość - oznacza to, że program wykorzystuje sprzęt maszyn wielordzeniowych do wykonywania zadań w tym samym czasie, dzieląc pracę na zadania, z których każde jest wykonywane na osobnym rdzeniu. To trochę jak śpiewanie pod prysznicem: właściwie robisz dwie rzeczy dokładnie w tym samym czasie.

Wielowątkowość - jest to implementacja oprogramowania umożliwiająca jednoczesne wykonywanie różnych wątków. Wydaje się, że program wielowątkowy wykonuje kilka rzeczy jednocześnie, nawet jeśli działa na maszynie jednordzeniowej. Przypomina to trochę rozmowę z różnymi osobami przez różne okna komunikatorów; chociaż faktycznie przełączasz się w tę iz powrotem, efekt netto jest taki, że prowadzisz wiele rozmów w tym samym czasie.


To są naprawdę dobre analogie! Dzięki. Czy należałoby powiedzieć, że współbieżność można zdefiniować za pomocą definicji wielowątkowości? Czyli współbieżność = wielowątkowość na pojedynczym rdzeniu, która wygląda tak, jakby miała miejsce w tym samym czasie, ale naprawdę szybko przełącza się w tę iz powrotem?
wongz

3

Konkurencja

Współbieżność oznacza, że ​​aplikacja wykonuje postępy w więcej niż jednym zadaniu w tym samym czasie (jednocześnie). Cóż, jeśli komputer ma tylko jeden procesor, aplikacja może nie wykonywać postępu w więcej niż jednym zadaniu dokładnie w tym samym czasie, ale więcej niż jedno zadanie jest przetwarzane jednocześnie w aplikacji. Nie kończy całkowicie jednego zadania przed rozpoczęciem następnego.

Równoległość

Równoległość oznacza, że ​​aplikacja dzieli swoje zadania na mniejsze podzadania, które mogą być przetwarzane równolegle, na przykład na wielu procesorach w tym samym czasie.

Współbieżność a równoległość w szczegółach

Jak widać, współbieżność jest związana ze sposobem, w jaki aplikacja obsługuje wiele zadań, nad którymi pracuje. Aplikacja może przetwarzać jedno zadanie na raz (sekwencyjnie) lub pracować nad wieloma zadaniami w tym samym czasie (współbieżnie).

Z drugiej strony równoległość jest związana ze sposobem, w jaki aplikacja obsługuje poszczególne zadania. Aplikacja może przetwarzać zadanie kolejno od początku do końca lub podzielić zadanie na podzadania, które można wykonywać równolegle.

Jak widać, aplikacja może być współbieżna, ale nie równoległa. Oznacza to, że przetwarza więcej niż jedno zadanie w tym samym czasie, ale zadania nie są podzielone na podzadania.

Aplikacja może być również równoległa, ale nie współbieżna. Oznacza to, że aplikacja działa jednocześnie tylko na jednym zadaniu, a to zadanie jest podzielone na podzadania, które mogą być przetwarzane równolegle.

Ponadto aplikacja nie może być ani współbieżna, ani równoległa. Oznacza to, że działa tylko na jednym zadaniu naraz, a zadanie nigdy nie jest dzielone na podzadania do równoległego wykonywania.

Wreszcie, aplikacja może być zarówno współbieżna, jak i równoległa, ponieważ zarówno działa na wielu zadaniach w tym samym czasie, jak i dzieli każde zadanie na podzadania do równoległego wykonywania. Jednak niektóre korzyści płynące z współbieżności i równoległości mogą zostać utracone w tym scenariuszu, ponieważ procesory w komputerze są już wystarczająco zajęte przez samą współbieżność lub równoległość. Połączenie tego może prowadzić do niewielkiego wzrostu wydajności lub nawet utraty wydajności. Upewnij się, że przeprowadziłeś analizę i pomiary, zanim ślepo zaadoptujesz współbieżny model równoległy.

Z http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html


3

Równolegle:Jest to szerokie pojęcie, które oznacza, że ​​dwa fragmenty kodu są wykonywane „w tym samym czasie”. Nie ma znaczenia, czy jest to „prawdziwy” paralelizm, czy też jest sfałszowany przez jakiś sprytny wzorzec projektowy. Chodzi o to, że „zadania” można uruchamiać w tym samym czasie, a następnie sterować nimi osobno (za pomocą muteksu i wszystkich odpowiednich sztuczek). Zwykle jednak wolisz używać słowa „równoległy” tylko dla „prawdziwego” równoległości, na przykład: wykonujesz to poprzez niewspółpracującą wielozadaniowość (czy to poprzez rdzenie CPU / GPU, czy tylko na poziomie oprogramowania, pozwalając systemowi operacyjnemu zarządzać tym na bardzo niskim poziomie). Ludzie niechętnie mówią „równolegle” tylko dla skomplikowanego kodu sekwencyjnego, który udaje równoległość, jak na przykład w javascript w oknie przeglądarki. Stąd powód, dla którego ludzie w tym wątku mówią, że „asynchroniczność nie ma nic wspólnego z równoległością”. Dobrze, ale nie myl ich.

Współbieżność: nie może istnieć współbieżność bez równoległości (symulowanej lub rzeczywistej, jak wyjaśniłem powyżej), ale ten termin skupia się konkretnie na fakcie, że oba systemy będą w pewnym momencie próbowały uzyskać dostęp do tego samego zasobu w tym samym czasie. Kładzie nacisk na fakt, że będziesz musiał sobie z tym poradzić.

Asynchroniczny : każdy ma rację, mówiąc, że asynchroniczność nie ma związku z równoległością, ale toruje jej drogę (ciężar spoczywa na tobie, aby wszystko było równoległe lub nie - czytaj dalej).

„Asynchroniczne” odnosi się do reprezentacji równoległości, która formalizuje trzy podstawowe rzeczy zwykle związane z paralelizmem: 1) zdefiniowanie inicjalizacji zadania (powiedz, kiedy się zaczyna i jakie parametry otrzymuje), 2) co należy zrobić po jego zakończeniu i 3) Co kod powinien nadal robić w międzyczasie.

Ale nadal jest to tylko składnia (zwykle jest reprezentowana jako metody wywołania zwrotnego). Za kulisami podstawowy system może po prostu zdecydować, że te tak zwane „zadania” są po prostu fragmentami kodu, które gromadzą się, dopóki nie zakończy kodu, który aktualnie wykonuje. Następnie rozkłada je jeden po drugim i wykonuje je sekwencyjnie. Albo nie. Może również utworzyć wątek na zadanie i uruchamiać je równolegle. Kogo to obchodzi? Ta część nie jest zawarta w koncepcji;)


2

Jest tu trochę semantyki do wyjaśnienia:

Współbieżność lub równoległość to kwestia rywalizacji o zasoby , podczas gdy asynchroniczny dotyczy przepływu sterowania .

Różne procedury (lub ich operacje składowe ) nazywane są asynchronicznymi, gdy nie ma deterministycznej implementacji kolejności ich przetwarzania ; innymi słowy, istnieje prawdopodobieństwo, że którykolwiek z nich mógłby zostać przetworzony w dowolnym momencie T. Z definicji wiele procesorów (np. CPU lub Persons) umożliwia jednoczesne przetwarzanie kilku z nich; na pojedynczym procesorze ich przetwarzanie jest przeplatane (np. Wątki).

Procedury lub operacje asynchroniczne są nazywane współbieżnymi, gdy współużytkują zasoby ; Współbieżność to określona możliwość rywalizacji w dowolnym momencie T. Równoległość jest trywialnie gwarantowana, gdy żadne zasoby nie są współdzielone (np. Inny procesor i pamięć); w przeciwnym razie należy zająć się kontrolą współbieżności.

Dlatego procedura lub operacja asynchroniczna może być przetwarzana równolegle lub współbieżnie z innymi.


2

Współbieżność oznacza wykonywanie wielu zadań w tym samym czasie, ale niekoniecznie jednocześnie. Kiedy musisz wykonać więcej niż jedno zadanie, ale masz jeden zasób, wybieramy współbieżność. W środowisku z jednym rdzeniem współbieżność jest osiągana dzięki przełączaniu kontekstu.

Równoległość jest jak wykonywanie więcej niż jednego zadania jednocześnie, tak jak śpiewanie i kąpiel razem. Teraz wykonujesz zadanie równolegle.

Asynchroniczne to coś, co jest związane z wykonywaniem wątków w modelu asynchronicznym, gdy jedno zadanie zostanie wykonane, możesz przełączyć się do innego zadania bez czekania na zakończenie poprzedniego.

Programowanie asynchroniczne pomaga nam osiągnąć współbieżność. Programowanie asynchroniczne w środowisku wielowątkowym jest sposobem na osiągnięcie równoległości.


2

„Synchronizacja i asynchronizacja to modele programowania. Współbieżne i równoległe to sposoby wykonywania zadań…”. Źródło: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

Innymi słowy, sync i async opisują, jak program wykonuje się podczas wywołania funkcji (czy będzie czekał, czy będzie kontynuował wykonywanie?), Podczas gdy współbieżne i równoległe opisują, jak funkcja (zadanie) będzie wykonywana (współbieżne = prawdopodobnie wykonywane w w tym samym czasie, równolegle = efektywnie wykonywane w tym samym czasie).


medium nie jest źródłem, to artykuł napisany przez kogoś innego, opowiadający o swoim (błędnym) rozumieniu tematu, nie czyni go autorytetem.
Moha wszechmocny wielbłąd

1
To cytat, a więc źródło. Większość odpowiedzi tutaj nie jest napisanych przez autorytety w żadnej dziedzinie, a wyjaśnienie podane przez autora jest wystarczająco dobre.
Pedro Boechat

W stackoverflow masz przynajmniej system głosowania i jest to społeczność profesjonalistów. Każdy może napisać wszystko na nośniku. To nie jest uczciwe porównanie między nimi.
Moha, wszechmocny wielbłąd

1
Tutaj też każdy może coś napisać, nie wiem, dlaczego wybierasz Medium. W każdym razie jestem profesjonalnym programistą i popieram to zrozumienie. I uważam, że jest elegancki, ponieważ jest stosunkowo krótki.
Pedro Boechat

Problem nie polega na tym, że Medium jest złym źródłem, problem w tym, że odpowiedź, która zawiera jedynie linki do zewnętrznej strony, nie jest odpowiedzią. Mógłbyś znacznie poprawić tę odpowiedź, gdybyś rozwinął zacytowaną część lub podsumował treść artykułu, zamiast tylko linkować do niego.
David Schwartz

1

Zbieżność a równoległość: współbieżność w jednym momencie można wykonać tylko jedno zadanie. przykład: równoległość pojedynczego procesora procesora w jednym miejscu możemy wykonać wiele zadań. przykład: dwurdzeniowy lub wielordzeniowy procesor


1

Tutaj wyjaśniam na kilku przykładach


Równoległość

Graficzny wykorzystuje przetwarzanie równoległe przetwarzanie tego samego bloku kodu (AKA ziaren ) o tysiącach nici logicznych i fizycznych. W idealnym przypadku proces rozpoczyna się i kończy w tym samym czasie dla wszystkich wątków. Pojedynczy rdzeń procesora bez hiperwątkowości nie może wykonywać przetwarzania równoległego.

Uwaga: Powiedziałem idealnie, ponieważ kiedy uruchamiasz jądro o rozmiarze 7M wywołań na sprzęcie z 6M wątkami, musi ono uruchamiać się dwukrotnie, uruchamiając ten sam kod na wszystkich 6M wątkach równolegle, jednocześnie zużywając wszystkie 6M wątki za każdym razem.

  • jedno jądro (fragment kodu) jest wykonywane na wielu procesorach
  • równocześnie
  • z pojedynczą sekwencją wykonywania ( jądro musi robić to samo we wszystkich wątkach, więc unika się „rozgałęziania” lub „jeśli”, ponieważ będą one drastycznie zużywać zasoby, tworząc wiele NOP (bez operacji) w celu synchronizacji wszystkich wątków)
  • zasadniczo zwiększa drastycznie prędkość
  • drastycznie ogranicza to, co możesz zrobić
  • w dużym stopniu zależy od sprzętu

Uwaga: równoległość nie ogranicza się do GPU.


Konkurencja

Serwis internetowy odbiera wiele małych wnioski w czasie rzeczywistym i musi obsłużyć każdego z tych wniosków w inny sposób, w dowolnym czasie i niezależnie od innych wniosków lub jakichkolwiek wewnętrznych pracy. Jednak chcesz, aby usługa internetowa działała przez cały czas bez uszkadzania stanu danych lub kondycji systemu.

Wyobraź sobie użytkownika aktualizującego rekord i innego użytkownika usuwającego ten sam rekord w tym samym czasie.

  • wykonywanych jest wiele zadań
  • w czasie rzeczywistym (lub gdy przychodzi żądanie)
  • z różnymi sekwencjami wykonywania (w przeciwieństwie do jądra w przetwarzaniu równoległym, współbieżne zadania mogą robić różne rzeczy, najprawdopodobniej będziesz musiał je ustawić w kolejce lub nadać im priorytety)
  • zasadniczo poprawia średni czas odpowiedzi, ponieważ zadanie nr 2 nie musi czekać na zakończenie zadania nr 1
  • zasadniczo poświęca czas obliczeniowy, ponieważ wiele zadań jest wykonywanych w tym samym czasie, a zasoby są ograniczone
  • musi właściwie zarządzać współdzielonymi zasobami, aby nie wpadały w zakleszczenia lub nie uszkadzały danych.

Uwaga : te żądania zwykle zajmują pewne istotne zasoby, takie jak pamięć, połączenie z bazą danych lub przepustowość. Jednak chcesz, aby usługa internetowa zawsze reagowała. Asynchroniczność jest kluczem do tego, aby była responsywna , a nie współbieżna


Asynchroniczny

Jeden ciężki proces (taki jak operacja we / wy) może łatwo zablokować GUI, jeśli jest uruchamiany w wątku GUI. Aby zagwarantować responsywność interfejsu użytkownika , ciężki proces może być wykonywany asynchronicznie. Lepiej jest uruchamiać pojedynczo podobne operacje asynchroniczne . np. wiele operacji związanych z we / wy może być znacznie wolniejszych, jeśli są uruchamiane w tym samym czasie, więc lepiej umieścić je w kolejce, aby zakończyć do rozpoczęcia

  • jedno zadanie lub partia zadań jest wykonywana w innym wątku
  • jeden raz
  • jeśli jest jedno zadanie, nie ma sekwencji, więc albo czekasz, aż się zakończy, albo odpalasz i zapomnisz
  • jeśli jest to partia zadań, możesz albo odpalić i zapomnieć o wszystkich w tym samym czasie, poczekać, aż wszystko się skończy, lub uruchomić każde zadanie zakończone, aby rozpocząć
  • zasadniczo zmniejsza wydajność z powodu kosztów ogólnych
  • zapewnia responsywność na inny wątek (skuteczny w przypadku blokowania wątku interfejsu użytkownika lub innych istotnych wątków)

Uwaga: operacja asynchroniczna wykonywana współbieżnie (tj. Więcej niż raz na raz) jest operacją współbieżną.


Uwaga: Współbieżność i asynchroniczność są często mylone ze sobą. Współbieżność odnosi się do różnych części systemu współpracujących ze sobą bez wzajemnego zakłócania (problemy te są często rozwiązywane za pomocą blokad, semaforów lub muteksów). Asynchroniczność to sposób, w jaki uzyskujesz responsywność (na przykład wątkowanie).

* Uwaga: asynchroniczność i wielowątkowość są często mylone ze sobą. Kod asynchroniczny niekoniecznie obejmuje nowy wątek. może to być operacja sprzętowa lub jak Stephan nazywa to czystą operacją, przeczytaj to

np. w poniższym kodzie WPF + C # await Task.Run(()=> HeavyMethod(txt))rozwiązuje problem asynchroniczności, podczas gdy textBox.Dispatcher.Invokerozwiązuje problem współbieżności:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

Zamierzam krótko i interesująco omówić te koncepcje.

Współbieżne a równoległe - sposoby wykonywania zadań.

Weź przykład z prawdziwego życia: jest wyzwanie, które wymaga zarówno zjedzenia całego ogromnego ciasta, jak i zaśpiewania całej piosenki. Wygrasz, jeśli jesteś najszybszy, który zaśpiewa całą piosenkę i dokończy ciasto. Więc zasada jest taka, że ​​śpiewasz i jesz jednocześnie . Jak to robisz, nie należy do reguły. Możesz zjeść całe ciasto, a następnie zaśpiewać całą piosenkę, lub możesz zjeść pół ciasta, potem zaśpiewać pół piosenki, a potem powtórzyć itd.

Równoległość to specyficzny rodzaj współbieżności, w którym zadania są naprawdę wykonywane jednocześnie. W informatyce równoległość można osiągnąć tylko w środowiskach wielordzeniowych.

Synchroniczne vs. asynchroniczne - modele programowania.

W synchronizacji piszesz kod jako kroki, które są wykonywane w kolejności, od góry do dołu. W asynchronicznym modelu programowania kod tworzy się jako zadania, które są następnie wykonywane jednocześnie. Wykonywanie współbieżne oznacza, że ​​wszystkie zadania są prawdopodobnie wykonywane w tym samym czasie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.