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?
multithreading
asynchronous
concurrency
GurdeepS
źródło
źródło
Odpowiedzi:
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.
źródło
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.
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
Równoległość
Metody asynchroniczne
źródło
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.
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.
źródło
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.
źródło
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.
źródło
Z http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
źródło
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;)
źródło
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.
źródło
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.
źródło
„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).
źródło
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
źródło
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.
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.
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
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 gdytextBox.Dispatcher.Invoke
rozwiązuje problem współbieżności:źródło
Zamierzam krótko i interesująco omówić te koncepcje.
Współbieżne a równoległe - sposoby wykonywania zadań.
Synchroniczne vs. asynchroniczne - modele programowania.
źródło