Wykonanie asynchroniczne vs synchroniczne, co to tak naprawdę znaczy?

Jaka jest różnica między wykonaniem asynchronicznym a synchronicznym?

Author: nisarg parekh, 2009-04-14

21 answers

Kiedy wykonujesz coś synchronicznie, czekasz na zakończenie, zanim przejdziesz do innego zadania. Gdy wykonasz coś asynchronicznie, możesz przejść do innego zadania, zanim się skończy.

To powiedziawszy, w kontekście komputerów przekłada się to na wykonanie procesu lub zadania na innym "wątku."Wątek to seria poleceń (blok kodu), która istnieje jako jednostka pracy. System Operacyjny może zarządzać wieloma wątkami i przypisywać wątek kawałkowi ("slice") czasu procesora przed przełączeniem na inny wątek, aby dać mu kolej na wykonanie jakiejś pracy. W swoim rdzeniu (wybacz kalambur) procesor może po prostu wykonać polecenie, nie ma koncepcji robienia dwóch rzeczy na raz. System operacyjny symuluje to, przydzielając plasterki czasu różnym wątkom.

Teraz, jeśli wprowadzisz wiele rdzeni / procesorów do miksu, wtedy rzeczy mogą się wydarzyć w tym samym czasie. System Operacyjny może przydzielić czas do jednego wątku na pierwszym procesorze, następnie przydziel ten sam blok czasu do innego wątku na innym procesorze. Wszystko to polega na umożliwieniu systemowi operacyjnemu zarządzania wykonaniem zadania, podczas gdy ty możesz kontynuować w swoim kodzie i robić inne rzeczy.

Programowanie asynchroniczne jest skomplikowanym tematem ze względu na semantykę tego, jak rzeczy się ze sobą wiążą, kiedy można je robić w tym samym czasie. Istnieje wiele artykułów i książek na ten temat; zobacz!

 1396
Author: Adam Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 15:19:52

Synchroniczny / asynchroniczny nie ma nic wspólnego z wielowątkowością.

Synchronous lubSynchronized oznacza "połączony" lub "zależny" w jakiś sposób. Innymi słowy, dwa zadania synchroniczne muszą być świadome siebie, a jedno zadanie musi wykonać w sposób zależny od drugiego, np. czekać, aby rozpocząć, aż inne zadanie zostanie zakończone.
Asynchroniczne oznacza, że są całkowicie niezależne i żaden z nich nie musi brać pod uwagę drugiego w żaden sposób, ani w inicjacja lub egzekucja.

Synchroniczny (jeden wątek):

1 thread ->   |<---A---->||<----B---------->||<------C----->|

Synchroniczny (wielowątkowy):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Asynchroniczny (jeden wątek):

         A-Start ------------------------------------------ A-End   
           | B-Start -----------------------------------------|--- B-End   
           |    |      C-Start ------------------- C-End      |      |   
           |    |       |                           |         |      |
           V    V       V                           V         V      V      
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->| 

Asynchroniczny (wielowątkowy):

 thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • punkty początkowe i końcowe zadań A, B, C reprezentowane przez <, > postaci.
  • plastry czasu procesora reprezentowane przez pionowe paski |

Technicznie, pojęcie synchroniczne / asynchroniczne naprawdę nie ma nic wspólnego z wątkami . Chociaż, ogólnie rzecz biorąc, nietypowe jest znajdowanie zadań asynchronicznych działających w tym samym wątku, możliwe jest (przykłady poniżej) i jest powszechne znajdowanie dwóch lub więcej zadań wykonujących się synchronicznie na oddzielnych wątkach... Nie, pojęcie synchroniczne / asynchroniczne musi mieć wyłącznie z tym, czy drugie lub kolejne zadanie może zostać zainicjowane przed ukończeniem drugiego (pierwszego) zadania, czy też musi poczekać. To wszystko. Co? wątek (lub wątki), procesy, Procesory, a nawet sprzęt, na którym wykonywane są zadania nie ma znaczenia. Rzeczywiście, aby to podkreślić, edytowałem grafikę, aby to pokazać.

PRZYKŁAD ASYNCHRONICZNY. W rozwiązywaniu wielu problemów inżynierskich oprogramowanie jest zaprojektowane tak, aby podzielić Ogólny problem na wiele indywidualnych zadań, a następnie wykonać je asynchronicznie. Odwrócenie macierzy, lub problem analizy elementów skończonych, są dobrymi przykładami. W informatyce sortowanie listy jest przykład. Na przykład funkcja szybkiego sortowania dzieli listę na dwie listy i sortuje każdą z nich, wywołując ją rekurencyjnie. W obu powyższych przykładach oba zadania mogą (i często były) wykonywane asynchronicznie. Nie muszą być na oddzielnych wątkach. Nawet maszyna z jednym procesorem i tylko jeden wątek wykonania może być zakodowana w celu zainicjowania przetwarzania drugiego zadania przed ukończeniem pierwszego. Jedynym kryterium jest to, że wyniki jednego zadania nie są konieczne, ponieważ wejścia do innego zadania . Tak długo, jak czasy rozpoczęcia i zakończenia zadań nakładają się na siebie (możliwe tylko wtedy, gdy wyjście żadnego z nich jest potrzebne jako wejście do drugiego), są one wykonywane asynchronicznie, bez względu na to, ile wątków jest w użyciu.

PRZYKŁAD SYNCHRONICZNY. Każdy proces składający się z wielu zadań, w których zadania muszą być wykonywane w kolejności, ale jeden musi być wykonany na innym komputerze (pobieranie i/lub aktualizacja danych, uzyskać wycenę zapasów z usługi finansowej, itp.). Jeśli to na oddzielnej maszynie jest na osobnym wątku, zarówno synchronicznym, jak i asynchronicznym.

 941
Author: Charles Bretana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 04:06:15

W uproszczeniu:

Synchroniczne

Jesteś w kolejce po bilet do kina. Nie możesz go zdobyć, dopóki wszyscy przed tobą go nie dostaną, a to samo dotyczy osób stojących w kolejce za tobą.

Asynchroniczny

Jesteś w restauracji z wieloma innymi ludźmi. Zamawiasz jedzenie. Inni ludzie mogą również zamówić swoje jedzenie, nie muszą czekać na jedzenie, aby być gotowane i serwowane do Ciebie, zanim będą mogli zamówić. W kuchni pracownicy restauracji są ciągłe gotowanie, serwowanie i przyjmowanie zamówień. Ludzie dostaną jedzenie, jak tylko zostanie ugotowane.

 528
Author: themightysapien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-29 19:51:31

Postaram się wyjaśnić jak najprościej, abyś (mam nadzieję) pamiętał:

Wykonanie Synchroniczne

Mój szef jest zajętym człowiekiem. Kazał mi napisać kod. Mówię mu: w porządku. Zaczynam, a on patrzy na mnie jak sęp, stojący za mną, poza moim ramieniem. Ja na to: "stary, WTF: może pójdziesz i coś zrobisz, kiedy ja to skończę?"

On na to: "nie, ja czekam tutaj aż skończysz."To jest synchroniczne.

Asynchroniczne Wykonanie

Szef każe mi to zrobić, i zamiast czekać tam na moją pracę, szef wychodzi i wykonuje inne zadania. Kiedy kończę pracę, po prostu melduję się szefowi i mówię: "skończyłem!"Jest to wykonanie asynchroniczne.

To naprawdę takie proste! Mam nadzieję, że to pomoże.

(posłuchaj mojej rady: nigdy nie pracuj z szefem za tobą.)

 250
Author: BKSpurgeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 03:57:00

Wykonanie synchroniczne oznacza wykonanie w jednej serii. A->B->C->D. Jeśli wywołujesz te procedury, A uruchomi się, zakończy, B rozpocznie się, zakończy, C rozpocznie się, itd.

Z wykonaniem asynchronicznym , rozpoczynasz rutynę i pozwalasz jej działać w tle podczas rozpoczynania następnej, a następnie w pewnym momencie mówisz "poczekaj, aż to się skończy". Raczej:

Start A->B->C->D->Wait for A to wykończenie

Zaletą jest to, że można wykonać B, C, and or D while A jest nadal uruchomiony( w tle, na osobnym wątku), więc możesz lepiej wykorzystać swoje zasoby i mieć mniej "zawieszeń" lub "czekania".

 74
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-12 22:26:54

Synchroniczne oznacza, że wywołujący czeka na odpowiedź lub zakończenie, asynchroniczne, że wywołujący kontynuuje i odpowiedź przychodzi później (jeśli dotyczy).

Jako przykład:

    static void Main(string[] args)
    {
        Console.WriteLine("Before call");
        doSomething();
        Console.WriteLine("After call");
    }

    private static void doSomething()
    {
        Console.WriteLine("In call");
    }

To zawsze będzie:

Before call
In call
After call

Ale gdybyśmy zrobili dosometing asynchroniczny( na wiele sposobów), wtedy wyjście Może stać się:

Before call
After call
In call

Ponieważ metoda wykonująca asynchroniczne wywołanie natychmiast kontynuowałaby następną linię kodu. Mówię "może", ponieważ kolejność wykonania nie może być zagwarantowana przy operacjach asynchronicznych. Może również wykonywać jako oryginał, w zależności od czasu wątku, itp.

 46
Author: Ragoczy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-26 16:40:11

W skrócie, synchronizacja odnosi się do dwóch lub więcej procesów start i end punktów, Nie ich egzekucje . W tym przykładzie punkt końcowy procesu a jest zsynchronizowany z punktem początkowym procesu B:

SYNCHRONOUS
   |--------A--------|
                     |--------B--------|

Procesy asynchroniczne, z drugiej strony, nie mają zsynchronizowanych punktów początkowych i końcowych:

ASYNCHRONOUS
   |--------A--------|
         |--------B--------|

Gdzie proces a nakłada się na proces B, działają jednocześnie lub synchronicznie (definicja słownikowa), stąd zamieszanie.

Aktualizacja: Charles Bretana poprawił swoją odpowiedź , więc ta odpowiedź jest teraz tylko prostą (potencjalnie uproszczoną) mnemoniką.

 34
Author: entr0p3te,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 22:18:14

Myślę, że jest to trochę okrągłe Wyjaśnienie, ale nadal wyjaśnia za pomocą prawdziwego przykładu życia.

Mały Przykład:

Powiedzmy, że odtwarzanie dźwięku składa się z trzech kroków:

  1. pobieranie skompresowanego utworu z twardego dysku
  2. Dekompresować dźwięk. Odtwarzanie nieskompresowanego dźwięku.

Jeśli twój odtwarzacz audio wykonuje krok 1,2,3 sekwencyjnie dla każdego utworu, to jest synchroniczny. Będziesz musiał poczekać trochę czasu, aby usłyszeć piosenkę, aż piosenka faktycznie pobiera i dekompresuje.

Jeśli twój odtwarzacz audio robi krok 1,2,3 niezależnie od siebie, to jest asynchroniczny. ie. Podczas odtwarzania audio 1 (Krok 3), Jeśli pobiera audio 3 z dysku twardego równolegle (Krok 1) i dekompresuje audio 2 równolegle. (Krok 2 ) W końcu usłyszysz piosenkę bez czekania na pobieranie i dekompresję.

 30
Author: aJ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 04:10:02

Po prostu powiedział asynchroniczne wykonanie robi rzeczy w tle.

Na przykład, jeśli chcesz pobrać plik z Internetu, możesz użyć funkcji synchronicznej, aby to zrobić, ale zablokuje ona wątek do momentu zakończenia pobierania pliku. Może to spowodować, że aplikacja nie będzie odpowiadać na żadne dane użytkownika.

Zamiast tego można pobrać plik w tle za pomocą metody asynchronicznej. W tym przypadku funkcja pobierania powraca natychmiast i wykonanie programu kontynuuje normalnie. Wszystkie operacje pobierania są wykonywane w tle, a twój program zostanie powiadomiony po jego zakończeniu.

 18
Author: Michał Piaskowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-14 15:54:53

Podczas wykonywania sekwencji typu: a > b > c > d>, jeśli w środku wykonania wystąpi błąd typu:

a
b
c
fail

Potem zaczynamy od początku:

a
b
c
d

To jest synchroniczne

Jeśli jednak mamy do wykonania tę samą sekwencję: a > b > c > d> i mamy awarię w środku:

a
b
c
fail

...ale zamiast restartować od początku, zaczynamy ponownie od punktu awarii:

c
d

...jest to znane jako asynchroniczne.

 14
Author: mohamed tharik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 14:03:17

Jako bardzo prosty przykład,

Synchroniczne

Wyobraź sobie 10 uczniów poinstruowanych, by szli jak Kolejka po drodze. Trzecia uczennica rozwiązała sznurówkę. Teraz zatrzymała się i znowu związała. Wszyscy uczniowie za nią zatrzymali się i czekają, aż ją związie. 1. i 2. uczniowie przeszli obok nich wszystkich i kontynuowali w swoim zwykłym tempie.
10-->9-->8-->7-->6-->5-->4-->3.     2-->1-->

Asynchroniczne

Wyobraź sobie 10 losowych ludzie chodzą tą samą drogą. Oczywiście nie są w kolejce, tylko losowo chodzą po różnych miejscach na drodze w różnych krokach.

Sznurówka trzeciej osoby została rozwiązana. Zatrzymała się, żeby ją znowu związać. Ale nikt na nią nie czeka. Wszyscy inni nadal idą tą samą drogą, którą robili wcześniej, w tym samym tempie, co ich.
10-->    9-->
   8--> 7-->   6-->
 5-->  4-->  3. 2-->
1-->
 10
Author: Dasun Nirmitha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 11:22:20

Synchronous Programming model - wątek jest przypisany do jednego zadania i rozpoczyna pracę nad nim. Po zakończeniu zadania jest ono dostępne dla następnego zadania. W tym modelu nie może opuścić wykonującego zadania w środku, aby zająć się innym zadaniem. Omówmy, jak ten model działa w środowiskach jedno-i wielowątkowych.

Single Threaded - Jeśli mamy kilka zadań do wykonania, a obecny system zapewnia tylko jeden wątek, to zadania są przypisane do wątek jeden po drugim. Można go obrazowo przedstawić jako
Synchroniczny Pojedynczy Gwintowany

Multi-Threaded - w tym środowisku mieliśmy wiele wątków, które mogą zająć się tymi zadaniami i zacząć nad tym pracować. Oznacza to, że mamy pulę wątków (nowe wątki mogą być również tworzone w oparciu o wymagania i dostępne zasoby) i masę zadań. Więc te wątki mogą pracować na nich jako
Synchroniczne Wielowątkowe

Asynchroniczny model programowania - w przeciwieństwie do Synchronous programming model, tutaj wątek po rozpoczęciu wykonywania zadania może trzymać go w środku, zapisać aktualny stan i rozpocząć wykonywanie innego zadania.

Single Threaded Asynchroniczny Pojedynczy Gwint

Wielowątkowe Asynchroniczne Wielowątkowe

Więcej tutaj - https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/

 9
Author: yoAlex5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 13:54:10

Mylisz synchroniczne z równoległymi seriami vs. Synchroniczne oznacza wszystko w tym samym czasie. Zsynchronizowane oznacza związane z każdym innym, co może oznaczać szeregowo lub w ustalonym przedziale. Podczas gdy program robi wszystko, to działa szeregowo. Weź słownik...dlatego mamy niesłodzoną herbatę. Masz herbatę lub słodzoną herbatę.

 8
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-11 15:18:31

Synchroniczne w zasadzie oznacza, że można wykonać tylko jedną rzecz na raz. Asynchroniczne oznacza, że możesz wykonywać wiele rzeczy naraz i nie musisz kończyć wykonywania bieżącej rzeczy, aby przejść do następnej.

 6
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 16:33:20

Operacja synchroniczna wykonuje swoją pracę przed powrotem do wywołującego.

Operacja asynchroniczna wykonuje (większość lub całość)swoją pracę po powrocie do wywołującego.

 4
Author: Maxim Eliseev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-05 00:50:14

synchroniczne : gdy zadanie jest wykonywane synchronicznie, czekasz na zakończenie zadania przed przejściem do innego zadania. Jedno zadanie zależy od końca drugiego

Asynchronous : gdy zadanie jest wykonywane asynchronicznie, możesz bezpośrednio przełączyć się na inne zadanie przed zakończeniem poprzedniego. Jedno zadanie nie zależy od drugiego.

W programowaniu zadania wykonywane są na " wątku ". Należy zrozumieć, że kilka wątki mogą być tworzone dla zadań, aby uniknąć układania w jednej kolejce.

To powiedziawszy, pojęcie synchroniczne i asynchroniczne nie mają wiele wspólnego z wątkami, powodem, dla którego wspominam, jest to, że rzadko zdarza się widzieć zadania działające asynchronicznie na jednym wątku (chociaż technicznie możliwe).

 4
Author: dfi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 21:44:53

W odniesieniu do" w tym samym czasie " definicja wykonania synchronicznego( co jest czasami mylące), oto dobry sposób, aby to zrozumieć:

Wykonanie synchroniczne: wszystkie zadania w bloku kodu są wykonywane w tym samym czasie.

Wykonanie asynchroniczne: wszystkie zadania w bloku kodu nie są wykonywane w tym samym czasie.

 1
Author: docta_faustus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 01:30:59

Myślę, że dobrym pomysłem jest klasyczny bieg sztafetowy

Synchronous : procesy takie jak członkowie tego samego zespołu, nie będą wykonywane, dopóki nie otrzymają pałeczki (koniec wykonania poprzedniego procesu / runnera), a mimo to wszystkie działają ze sobą w synchronizacji.

Asynchronous : gdzie procesy takie jak członkowie różnych drużyn na tym samym torze sztafetowym, będą biegać i zatrzymywać się, asynchronicznie ze sobą, ale w ramach tego samego wyścigu (ogólny program wykonanie).

Czy to ma sens?

 1
Author: Sharif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-11 15:24:51

Inna angielska definicja Synchronize to Tutaj

Coordinate; combine.

Myślę, że jest to lepsza definicja niż "dzieje się w tym samym czasie". To też jest definicja, ale nie sądzę, że jest to ta, która pasuje do sposobu, w jaki jest używana w informatyce.

Tak więc zadanie asynchroniczne nie jest koordynowane z innymi zadaniami, podczas gdy zadanie synchroniczne jest koordynowane z innymi zadaniami, więc jedno kończy się przed kolejnym uruchomieniem.

Jak to osiągnąć, to inna kwestia.

 1
Author: Greg0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 16:04:33

Synchroniczne oznacza, że kolejkowanie będzie wykonywane pojedynczo. Załóżmy, że jest tylko pojazd, który trzeba podzielić między znajomego, aby dotrzeć do celu jeden po drugim pojazd będzie dzielić.
W asynchronicznym przypadku każdy przyjaciel może wynająć pojazd i dotrzeć do celu.

 0
Author: Rohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-13 17:47:05

Tak synchroniczny oznacza jednocześnie, dosłownie, to oznacza wykonywanie pracy razem. wiele ludzi / obiektów na świecie może robić wiele rzeczy w tym samym czasie, ale jeśli spojrzymy na komputer, mówi synchroniczne środki, w których procesy współpracują ze sobą, co oznacza, że procesy są zależne od powrotu siebie i dlatego są wykonywane jeden po drugim w odpowiedniej kolejności. Natomiast asynchroniczne oznacza, że tam, gdzie procesy nie współpracują ze sobą, mogą działać jednocześnie(jeśli są na multithread), ale działają niezależnie.

 0
Author: Saptarshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 18:44:47