Wykonanie asynchroniczne vs synchroniczne, co to tak naprawdę oznacza? [Zamknięte]


1186

Jaka jest różnica między wykonywaniem asynchronicznym i synchronicznym?


... lub wykonanie „sekwencyjne vs. równoległe” ... chociaż prawdziwy równoległość wymaga wielu rdzeni, w przeciwnym razie jest logicznie przeplatany.
samis

8
Kiedyś myliłem oba terminy, a sposób, w jaki zapamiętałem różnicę, polega na rzuceniu pierwszego „A” w „ A JAX”, co oznacza asynchroniczny, w JavaScript, gdy wysyłasz żądania z AJAX w pętli, na którą nie czekają nawzajem lub blokują proces, ponieważ przeglądarka nie chce wpływać na komfort użytkowania zamrożonej witryny, wszystkie żądania są wysyłane prawie jednocześnie, bez oczekiwania na odpowiedź na poprzednie żądanie. To jest asynchroniczne
księgowy م

Odpowiedzi:


1747

Kiedy wykonujesz coś synchronicznie, czekasz na jego zakończenie, zanim przejdziesz do innego zadania. Gdy wykonujesz coś asynchronicznie, możesz przejść do innego zadania przed jego zakończeniem.

Biorąc to pod uwagę, w kontekście komputerów przekłada się to na wykonanie procesu lub zadania w 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ątkowi kawałek („plaster”) czasu procesora przed przełączeniem na inny wątek, aby dać mu kolejną pracę. U podstaw (przepraszam za kalambur) procesor może po prostu wykonać polecenie, nie ma pojęcia o robieniu dwóch rzeczy jednocześnie. System operacyjny symuluje to, przydzielając przedziały czasu do różnych wątków.

Teraz, jeśli wprowadzisz wiele rdzeni / procesorów do miksu, wtedy rzeczy MOGĄ się wydarzyć jednocześnie. System operacyjny może przydzielić czas do jednego wątku na pierwszym procesorze, a następnie przydzielić ten sam blok czasu do innego wątku na innym procesorze. Wszystko to polega na umożliwieniu systemowi zarządzającemu ukończeniem zadania, podczas gdy ty możesz kontynuować pracę w kodzie i robić inne rzeczy.

Programowanie asynchroniczne jest skomplikowanym tematem ze względu na semantykę tego, jak rzeczy wiążą się ze sobą, gdy można je wykonywać jednocześnie. Istnieje wiele artykułów i książek na ten temat; Spójrz!


246
Absolutnie myli mnie to, że synchroniczny oznacza „w tym samym czasie”, ale w powyższym znaczeniu oznacza sekwencyjny , a asynchroniczny oznacza „nie w tym samym czasie” ... ?? Czy ktoś może wyjaśnić ten konflikt?
Damien Roche,

45
@Zenph: W tym kontekście interesuje nas cały blok kodu. Synchroniczny oznacza, że ​​blok jest wykonywany w tym samym czasie (choć tak, komponenty są wykonywane sekwencyjnie). Asynchroniczny oznacza, że ​​nie wszystkie bloki są wykonywane jednocześnie.
Adam Robinson,

8
Wykonanie asynchroniczne ma również miejsce, gdy program wysyła komunikat do kolejki (jak w systemach przesyłania wiadomości, takich jak ActiveMQ, WebSphere MQ, HornetQ, MSMQ itp.). W takim przypadku wywołanie asynchroniczne nie wymaga programowania wielowątkowego ani obsługi współbieżności na poziomie systemu operacyjnego.
Paulo Merson

287
Co dziwne, „Synchronicznie” oznacza „korzystanie z tego samego zegara”, więc gdy dwie instrukcje są zsynchronizowane, używają tego samego zegara i muszą następować jeden po drugim. „Asynchroniczny” oznacza „nieużywanie tego samego zegara”, więc instrukcje nie dotyczą wzajemnego zbliżania się. Dlatego patrzy się wstecz, termin ten nie odnosi się do relacji instrukcji między sobą. Odnosi się do każdej relacji instrukcji do zegara. Mam nadzieję, że to pomaga.
Tom Padilla

14
Warunki pochodzą od inżynierii. en.wikipedia.org/wiki/Asynchronous_system
Tom Padilla

1150

Synchroniczny / asynchroniczny NIE MA NIC ZROBIĆ Z WIELOMIOTEM.

Synchroniczny lub zsynchronizowany oznacza w jakiś sposób „połączony” lub „zależny”. Innymi słowy, dwa zadania synchroniczne muszą być świadome siebie nawzajem, a jedno zadanie musi zostać wykonane w sposób zależny od drugiego, na przykład poczekać, aż uruchomi się drugie zadanie.
Asynchroniczne oznacza, że ​​są całkowicie niezależne i żadne z nich nie może brać pod uwagę w żaden inny sposób, ani w trakcie inicjacji, ani w wykonaniu.

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--------->|
  • Start i punkty końcowe zadania A, B, C reprezentowanych przez <, >znaków.
  • Segmenty czasu procesora reprezentowane przez pionowe słupki |

Technicznie koncepcja synchroniczna / asynchroniczna tak naprawdę nie ma nic wspólnego z wątkami . Chociaż ogólnie rzecz biorąc, niezwykłe jest znajdowanie zadań asynchronicznych działających w tym samym wątku, możliwe jest (patrz przykłady poniżej) i często zdarza się, że dwa lub więcej zadań wykonuje się synchronicznie w osobnych wątkach ... Nie, koncepcja Synchroniczny / asynchroniczny musi dotyczyć wyłącznie tego, czy drugie lub kolejne zadanie może zostać zainicjowane przed zakończeniem drugiego (pierwszego) zadania, czy też musi czekać. To wszystko. Jaki wątek (lub wątki), procesy lub procesory, a nawet sprzęt, na którym zadania są wykonywane, nie jest istotny. Rzeczywiście, aby to podkreślić, edytowałem grafikę, aby to pokazać.


PRZYKŁAD ASYNCHRONICZNY:

Przy rozwiązywaniu wielu problemów inżynierskich oprogramowanie ma na celu podzielenie ogólnego problemu na wiele indywidualnych zadań, a następnie wykonanie ich asynchronicznie. Dobrym przykładem jest odwrócenie macierzy lub problem analizy elementów skończonych. W informatyce sortowanie listy jest przykładem. Na przykład procedura quicksort dzieli listę na dwie listy i wykonuje szybkie sortowanie na każdej z nich, nazywając się rekurencyjnie (quicksort). W obu powyższych przykładach dwa zadania mogą (i często były) wykonywane asynchronicznie. Nie muszą znajdować się w osobnych wątkach. Nawet maszynę z jednym procesorem i tylko jednym wątkiem wykonania można zakodować w celu zainicjowania przetwarzania drugiego zadania przed zakończeniem pierwszego. Jedynym kryterium jest to, że wyniki jednego zadania nie są konieczne jako dane wejściowe do drugiego zadania. Tak długo, jak czasy rozpoczęcia i zakończenia zadań nakładają się (możliwe tylko, jeśli wynik żadnego z nich nie jest potrzebny jako dane wejściowe do drugiego), są one wykonywane asynchronicznie, bez względu na liczbę używanych wątków.

PRZYKŁAD SYNCHRONICZNY:

Każdy proces składający się z wielu zadań, w którym zadania muszą być wykonywane po kolei, ale jedno musi być wykonane na innym komputerze (Pobierz i / lub zaktualizuj dane, uzyskaj wycenę akcji z usługi finansowej itp.). Jeśli znajduje się na osobnej maszynie, znajduje się w osobnym wątku, zarówno synchronicznym, jak i asynchronicznym.


92
dlaczego na świecie słowa oznaczają różne rzeczy w komputerze ... zawsze wracam do tego ... ze słownika .. synchroniczny: występujący w tym samym czasie. asynchroniczny: nie występuje w tym samym czasie.
Muhammad Umer,

17
ale jak widać na komputerach, oznacza to odwrotnie
Muhammad Umer

5
Może nomenklatura opiera się na tym, czy inicjowanie zadań jest „synchronizowane” z realizacją innych zadań?
Charles Bretana,

11
@MuhammadUmer: w świecie komputerów występowanie w tym samym czasie nazywa się współbieżnością.
Roy Ling

5
IMHO, te zdjęcia nie wszystkie opisują synchroniczne vs asycnroniczne wykonywanie zadań Na przykład drugi obraz wskazuje, że zadania asynchroniczne wymagają kilku wątków. W rzeczywistości tak nie jest. Zadania muszą działać równolegle, co również nie jest wymagane. Lub obraz „synchroniczny” bardzo dobrze pokazuje, w jaki sposób zadania zostały asynchronicznie wysłane z jakiejś strony wywoławczej, a teraz wykonywane w szeregowym harmonogramie zadań;) IMO, zdjęcia wprowadzają w błąd.
CouchDeveloper

641

Mówiąc prościej:

SYNCHRONICZNY

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

ASYNCHRONICZNY

Jesteś w restauracji z wieloma innymi ludźmi. Zamawiasz swoje jedzenie. Inne osoby mogą również zamówić jedzenie, nie muszą czekać, aż zostanie ono ugotowane i podane, zanim będą mogły zamówić. W kuchni pracownicy restauracji stale gotują, serwują i przyjmują zamówienia. Ludzie dostaną swoje jedzenie, gdy tylko zostanie ugotowane.


10
Jeśli ktoś chce jabłka w porównaniu z jabłkami; jeśli chcesz, aby scenariusz restauracji był zsynchronizowany, to kiedy zamawiasz jedzenie, wszyscy inni w restauracji musieliby czekać na przybycie jedzenia, zanim będą mogli zamówić jedzenie itp. Teraz wygląda to na naprawdę głupi scenariusz, ale w świecie komputerów ten scenariusz może być przydatny. Powiedz, że każdy klient nie może zdecydować, czego chce, i zamiast tego chce spojrzeć na to, co poprzedni klient decyduje, czy tego chce, czy nie, to ma sens, że musi czekać na dostawę żywności przed złożeniem zamówienia.
Fonix

Wystarczy dodać ... może być tak, że operacje są wykonywane jak w kolejce w operacjach asynchronicznych ... Ale to wcale nie jest obowiązkowe.
Sreekanth Karumanaghat,

5
bardzo prosty i prawdziwy przykład z życia
Manish

Aby przekazać Twój przykład jeszcze bardziej, mogą rozważyć kilka bramek do sprzedaży biletów. Dlatego każda linia może działać asynchronicznie z drugiej linii, ale synchronicznie w sobie!
Saeed Ahadian

334

Proste objaśnienie przez analogię

Wykonanie synchroniczne

Mój szef jest zajęty. Mówi mi, żebym napisał kod. Mówię mu: w porządku. Zaczynam, a on obserwuje mnie jak sępa, stojącego za mną, z ramienia. Jestem jak „Koleś, WTF: dlaczego nie pójdziesz i nie zrobisz czegoś, dopóki to skończę?”

on mówi: „Nie, czekam tutaj, aż skończycie”. To jest synchroniczne.

Wykonanie asynchroniczne

Szef każe mi to zrobić i zamiast czekać tam na moją pracę, szef odchodzi i wykonuje inne zadania. Kiedy kończę pracę, po prostu zgłaszam się do szefa i mówię: „Skończono!” To jest wykonanie asynchroniczne.

(Posłuchaj mojej rady: NIGDY nie pracuj z szefem za tobą.)


28
JESTEM ZROBIONY ... jest jeszcze zabawniej, kiedy potraktujesz to jako rezygnację.
Daedric

91

Wykonanie synchroniczne oznacza, że ​​wykonanie odbywa się w jednej serii. A->B->C->D. Jeśli wywołujesz te procedury, Auruchomi się, a następnie zakończy, następnie Buruchomi, a następnie zakończy, Curuchomi itp.

W przypadku wykonywania asynchronicznego uruchamiasz procedurę i pozwól jej działać w tle podczas uruchamiania następnego, a następnie w pewnym momencie powiedz „poczekaj, aż to się skończy”. To bardziej jak:

Rozpocznij A->B->C->D->Zaczekaj na Azakończenie

Zaletą jest to, że można wykonać B, Ci czy Dpodczas Anadal działa (w tle, w osobnym wątku), dzięki czemu można lepiej wykorzystać swoje zasoby i mają mniej „zawiesza się” lub „czeka”.


@ Reed Copsey ...... Dziękuję za tak dobre wyjaśnienie ... Chciałem tylko trochę więcej informacji na temat Async-Exec ...... Na podstawie twojej odpowiedzi w Async Exec .... Zacznij A-> B-> C-> D-> Poczekaj, aż A skończy ... Więc wszystkie A, B, C, D zaczynają się od razu ...... i czekają, aż A skończy ..... Tak też B zakończy się dopiero po zakończeniu A, a C po B i tak dalej ......? A może B najpierw skończy, a potem A skończy?
Devrath,

8
@Devrath Operacje można zakończyć w dowolnej kolejności.
Reed Copsey

59

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

SYNCHRONICZNY
   | -------- A -------- |
                     | -------- B -------- |

Z drugiej strony procesy asynchroniczne nie mają zsynchronizowanych punktów początkowych i końcowych:

ASYNCHRONICZNY
   | -------- A -------- |
         | -------- B -------- |

Tam, gdzie Proces A nakłada się na Proces B, działają one jednocześnie lub synchronicznie (definicja słownikowa), stąd zamieszanie.

AKTUALIZACJA: Charles Bretana poprawił swoją odpowiedź , więc ta odpowiedź jest teraz prostym (potencjalnie nadmiernie uproszczonym) mnemonikiem.


2
kopia odpowiedzi Charlesa Bretana
Dinesh Saini

2
@DineshSaini - Mój schemat jest nieco inny. Dla jasności w obu przypadkach umieściłem A na B, podkreślając, czy ich punkty początkowe i końcowe są zsynchronizowane. Schemat Charlesa Bretany umieszcza procesy synchroniczne w sekwencji bez „synchronizacji” czegokolwiek. (Chciałem skomentować poniżej jego odpowiedzi, aby ją „ulepszyć”, ale zdałem sobie sprawę, że łatwiej byłoby po prostu pokazać nowy schemat.)
entr0p3te

Świetne diagramy. Myślę, że sposób nazywania najwyższego SYNC polega na tym, że początek i koniec A na górnym schemacie są efektywne w tym samym czasie, w tym sensie, że żadne inne zdarzenia nie interweniowały ani nie mogły przeszkadzać w ukończeniu A. Synchronizacja może odnosić się do pojedynczego zadania w oderwaniu, na przykład dodawania do rejestrów procesora, których początek i koniec są tak blisko, że faktycznie faktycznie są synchroniczne ze słownikiem.
Dean Radcliffe

55

Synchroniczny oznacza, że ​​dzwoniący czeka na odpowiedź lub zakończenie, asynchronicznie, że dzwoniący kontynuuje, a 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 generować:

Before call
In call
After call

Ale jeśli mielibyśmy uczynić doSomething asynchronicznym (wiele sposobów, aby to zrobić), to wynik mógłby wyglądać następująco:

Before call
After call
In call

Ponieważ metoda wykonująca wywołanie asynchroniczne natychmiast kontynuowałaby z następnym wierszem kodu. Mówię „mógł”, ponieważ nie można zagwarantować kolejności wykonywania operacji asynchronicznych. Może również działać jako oryginał, w zależności od czasów wątków itp.


34

Myślę, że jest to trochę ogólne wyjaśnienie, ale nadal wyjaśnia ono na przykładzie z prawdziwego życia.

Mały przykład:

Powiedzmy, że odtwarzanie dźwięku obejmuje trzy kroki:

  1. Pobieranie skompresowanej piosenki z dysku twardego
  2. Rozpakuj dźwięk.
  3. Odtwórz nieskompresowany dźwięk.

Jeśli odtwarzacz audio wykonuje kolejno kroki 1,2,3 dla każdego utworu, jest on synchroniczny. Będziesz musiał poczekać chwilę, aby usłyszeć piosenkę, aż piosenka zostanie rzeczywiście ściągnięta i zdekompresowana.

Jeśli Twój odtwarzacz audio wykonuje kroki 1,2,3 niezależnie od siebie, jest asynchroniczny. to znaczy. Podczas odtwarzania dźwięku 1 (krok 3), jeśli równolegle pobiera dźwięk 3 z dysku twardego (krok 1) i równolegle dekompresuje dźwięk 2. (krok 2) Skończysz na słuchaniu piosenki bez czekania na pobranie i dekompresję.


32

Operacje synchronizacji i asynchronizacji dotyczą wykonania zlecenia nowego zadania w stosunku do bieżącego zadania. Dwa zadania na stole: bieżące i nowe zadanie

Synchroniczny (blokowanie) - oznacza, że ​​zadania będą wykonywane jeden po drugim. Następne zadanie jest uruchamiane dopiero po zakończeniu poprzedniego zadania. Task 2nie jest uruchamiany do momentu Task 1zakończenia

Asynchroniczny (nieblokujący) - oznacza, że ​​zadanie natychmiast zwraca kontrolę z obietnicą wykonania kodu i powiadomienia o wyniku później (np. Wywołanie zwrotne, funkcja). Task 2jest wykonywany, nawet jeśli Task 1nie jest ukończony

TAK odpowiedź na temat synchronizacji i asynchronizacji: w systemie iOS , w systemie Android


Schemat w synchronicznym wielowątkowym przykładzie wydaje się przedstawiać jednoczesne wykonywanie wątków?
samis

@ sαmosΛris możesz rozważyć wątek jak oś X, która wskazuje oś czasu
yoAlex5

Oś X jest konwencjonalnie stosowana jako wymiar przestrzenny; oś t dla czasu - ważne rozróżnienie znalezione w analizie złożoności algorytmu.
samis

23

Mówiąc wprost, wykonywanie asynchroniczne robi rzeczy w tle.

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

Zamiast tego możesz pobrać plik w tle za pomocą metody asynchronicznej. W takim przypadku funkcja pobierania natychmiast wraca, a wykonywanie programu przebiega normalnie. Wszystkie operacje pobierania są wykonywane w tle, a Twój program zostanie powiadomiony o zakończeniu.


1
jak twój przykład będzie szybszy. Ostatecznie nie można odtworzyć pliku, dopóki nie zakończy się okres pobierania. Możesz wytłumaczyć? Chyba nie rozumiem wtedy asynchronizacji i to prawdopodobnie ja, ale co zrobiłby ten inny krok lub proces, gdy inny proces jest uruchomiony (pobieranie)? Mam na myśli to, co możesz zrobić, dopóki nie otrzymasz z powrotem tego procesu asynchronicznego (pobierania) w swojej aplikacji ... Nie rozumiem. Więc co, nadal musisz pokazać użytkownikowi jakiś mechanizm oczekiwania bez względu na to, w której z tych sytuacji?
PositiveGuy,

4
To nie musi być szybsze. Chodzi o to, aby nie blokować głównego wątku, aby mógł przetwarzać dane wejściowe innego rodzaju. Na przykład użytkownik może chcieć anulować pobieranie lub rozpocząć pobieranie innego pliku jednocześnie.
Michał Piaskowski,

19

Jako bardzo prosty przykład

SYNCHRONICZNY

Wyobraź sobie 3 uczniów, którzy zostali poproszeni o przeprowadzenie sztafety na drodze.

Pierwszy uczeń przebiega podaną odległość, zatrzymuje się i podaje pałeczkę drugiemu. Nikt inny nie zaczął działać.

1------>
        2.
                3.

Kiedy drugi uczeń odzyskuje pałeczkę, zaczyna biec na dany dystans.

      1.
        2------>
                3.

Druga studentka rozwiązała sznurowadło. Teraz przestała i znów się wiązała. Z tego powodu czas zakończenia drugiego wydłużył się, a czas rozpoczęcia trzeciego został opóźniony.

      1.
        --2.--->
                3.

Ten wzór trwa do momentu, aż 3. odzyska pałeczkę z 2. miejsca i ukończy wyścig.

ASYNCHRONICZNY

Wyobraź sobie 10 przypadkowych osób idących tą samą drogą. Oczywiście nie stoją w kolejce, po prostu chodzą w różnych miejscach na drodze w różnym tempie.

Sznurowadło drugiej osoby rozwiązało się. Zatrzymała się, żeby znów ją związać.

Ale nikt nie czeka na to, żeby ją związała. Wszyscy inni wciąż chodzą tak samo, jak wcześniej, w tym samym tempie.

10-->    9-->
   8--> 7-->   6-->
 5-->     4-->
1-->   2.    3-->

18

Stworzyłem gif dla wyjaśnienia tego, mam nadzieję, że będzie pomocny: spójrz, linia 3 jest asynchroniczna, a inne są synchroniczne. wszystkie linie przed linią 3 powinny poczekać, aż linia zakończy pracę, ale ponieważ linia 3 jest asynchroniczna, następna linia (linia 4), nie czekaj na linię 3, ale linia 5 powinna poczekać, aż linia 4 zakończy pracę, a linia 6 powinna czekać na linię 5 i 7 na 6, ponieważ linie 4,5,6,7 nie są asynchroniczne. linia 3 jest asynchroniczna, a inne są synchroniczne


12

Podczas wykonywania sekwencji takiej jak: a> b> c> d>, jeśli otrzymamy błąd w trakcie wykonywania, taki jak:

a
b
c
fail

Następnie zaczynamy od nowa:

a
b
c
d

to jest synchroniczne

Jeśli jednak mamy tę samą sekwencję do wykonania: a> b> c> d>, aw środku mamy błąd:

a
b
c
fail

... ale zamiast restartować od początku, restartujemy od momentu awarii:

c
d

... to jest asynchroniczne.


1
czy mógłbyś być bardziej precyzyjny w tym, co masz na myśli, poprzez zapewnienie szerszego kontekstu swoim przykładom
krichard 15.12.12

5
Ta odpowiedź jest po prostu nieprawidłowa.
user207421,

7

Mylisz Synchroniczny z Parallel vs Series. Synchroniczny oznacza wszystko w tym samym czasie. Zsynchronizowane środki odnoszące się do każdej innej dziedziny, które mogą oznaczać szeregowo lub w ustalonych odstępach czasu. Podczas gdy program robi wszystko, działa szeregowo. Zdobądź słownik ... dlatego mamy niesłodzoną herbatę. Masz herbatę lub słodzoną herbatę.


3
W rzeczywistości „zsynchronizowany” odnosi się do relacji między instrukcjami a zegarem. NIE związek między samymi instrukcjami. Dlatego wygląda na wstecz, że „synchroniczny” w rzeczywistości oznacza jeden po drugim: ale instrukcje są Zsynchronizowane z zegarem. „Asynchroniczny” oznacza „w dowolnym momencie, nie obchodzi mnie, kiedy to się stanie”: instrukcje nie muszą być synchronizowane z zegarem. Tak, istnieje definicja słownikowa, ale musisz upewnić się, że definiujesz poprawną sytuację.
Tom Padilla

1
Synchroniczny nie oznacza w obliczeniach „wszystkich jednocześnie”. Mylisz synchronizację z synchroniczną, a „równolegle z serią” z herbatą i słodką herbatą. Odpowiedź nie ma żadnego sensu.
user207421,

7

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


Czy wiele rzeczy wykonywanych w tym samym czasie nazywa się Wielowątkowością, a nie asynchroniczną.
Sreekanth Karumanaghat,

7

Skorzystaj z przykładu instrukcji przygotowania śniadania

  1. Nalej filiżankę kawy.
  2. Rozgrzej patelnię, a następnie usmaż dwa jajka.
  3. Usmaż trzy plasterki boczku.
  4. Tosty dwa kawałki chleba.
  5. Dodaj masło i dżem do tostów.
  6. Wlać szklankę soku pomarańczowego.

Jeśli masz doświadczenie w gotowaniu, wykonaj te instrukcje asynchronicznie. zaczniesz rozgrzewać patelnię na jajka, a potem zacznij bekon. Włożyłeś chleb do tostera, a potem zacząłeś jajka. Na każdym etapie procesu zaczynasz zadanie, a następnie skupiasz się na zadaniach gotowych.

Gotowanie śniadania jest dobrym przykładem pracy asynchronicznej, która nie jest równoległa. Jedna osoba (lub wątek) może obsłużyć wszystkie te zadania. Kontynuując analogię śniadania, jedna osoba może zrobić śniadanie asynchronicznie, rozpoczynając następne zadanie przed ukończeniem pierwszego. Gotowanie przebiega niezależnie od tego, czy ktoś go ogląda. Gdy tylko zaczniesz rozgrzewać patelnię na jajka, możesz zacząć smażyć boczek. Gdy bekon się zacznie, możesz włożyć chleb do tostera.

W przypadku algorytmu równoległego potrzebujesz wielu kucharzy (lub wątków). Zrobiłoby się jajka, jeden bekon i tak dalej. Każdy koncentrowałby się tylko na tym jednym zadaniu. Każdy kucharz (lub wątek) byłby blokowany synchronicznie, czekając, aż bekon będzie gotowy do przewrócenia lub grzanka do pęknięcia.

Odniesienia z koncepcji programowania asynchronicznego


4

Operacja synchroniczna wykonuje swoją pracę przed powrotem do dzwoniącego.

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


link jest martwy.
Mam nadzieję, że będzie

1

Jeśli chodzi o definicję wykonywania synchronicznego „ w tym samym czasie ” (co czasem jest mylące), oto dobry sposób na jej zrozumienie:

Wykonanie synchroniczne : wszystkie zadania w bloku kodu są wykonywane jednocześnie.

Wykonanie asynchroniczne : nie wszystkie zadania w bloku kodu są wykonywane jednocześnie.


Zgodziłbym się z tym bardziej, gdybyś powiedział „efektywnie w tym samym czasie” lub „ze względów praktycznych”. Myślę, że głosowanie negatywne dotyczyło niedokładnego stwierdzenia, że ​​w rzeczywistości rzeczy są robione w tym samym czasie.
Dean Radcliffe,

1

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

Synchroniczny : procesy takie jak członkowie tego samego zespołu, nie będą wykonywane, dopóki nie otrzymają pałki (koniec wykonywania poprzedniego procesu / programu uruchamiającego), a jednak wszystkie działają ze sobą w synchronizacji.

Asynchroniczny : tam, gdzie procesy, takie jak członkowie różnych zespołów na tej samej sztafecie, będą biegać i zatrzymywać się, asynchronizują się ze sobą, ale w ramach tego samego wyścigu (ogólne wykonanie programu).

Czy ma sens?


1

Inna angielska definicja Synchronize znajduje się tutaj

Koordynować; połączyć.

Myślę, że to lepsza definicja niż „dzieje się w tym samym czasie”. Jest to również definicja, ale nie sądzę, że pasuje do sposobu, w jaki jest używana w informatyce.

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

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


0

Synchroniczny oznacza wykonanie kolejki po kolei. Załóżmy, że istnieje tylko pojazd, który musi być udostępniony przyjacielowi, aby dotrzeć do miejsca docelowego, jeden po drugim pojazd będzie udostępniony.
W przypadku asynchronicznym każdy przyjaciel może wynająć pojazd i dotrzeć do celu.


0

Tak, synchroniczny oznacza jednocześnie, dosłownie, oznacza pracę razem. wielu ludzi / obiektów na świecie może wykonywać wiele rzeczy jednocześnie, ale jeśli spojrzymy na komputer, to znaczy, że synchroniczne oznacza, że ​​procesy współpracują ze sobą, co oznacza, że ​​procesy są zależne od wzajemnego powrotu i dlatego są one wykonywane po drugim w odpowiedniej kolejności. Podczas gdy asynchroniczne oznacza, że ​​procesy nie współpracują ze sobą, mogą one działać jednocześnie (jeśli są wielowątkowe), ale działają niezależnie.

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.