Łatwa do zrozumienia definicja „zdarzenia asynchronicznego”? [Zamknięte]

88

Spotykałem się z tym terminem często i nawet po wygooglowaniu nadal nie mogę zrozumieć, co dokładnie oznacza. Czy istnieje jakaś łatwa do zrozumienia (najlepiej z przykładami) definicja tego, jakie zdarzenie asynchroniczne jest, które ktoś może podać?

Dzięki!

jasonbogd
źródło

Odpowiedzi:

422

Przykład nie programistyczny:

Synchroniczne Chcesz pizzę na obiad i nie jesteś w stanie zamrożenia. Musisz więc przestać grać w WOW, które denerwuje twoją gildię. Idziesz do kuchni, robisz ciasto, polewasz sosem, dodajesz ser i dusisz ulubioną polewą bekonową. Właśnie spędziłeś 20 minut swojego czasu na robieniu pizzy i kolejne 10 minut w piekarniku. Minutnik wydaje sygnał dźwiękowy, a ty wyciągasz gorące ciasto. Możesz usiąść z powrotem przed komputerem, zjeść pizzę i kontynuować nalot.

Asynchroniczny Chcesz pizzę na obiad grając w WOW. Otwierasz okno przeglądarki na piątym monitorze. Wczytujesz stronę internetową Pizza i zamawiasz dodatkową serową pizzę z boczkiem z sosem czosnkowym z bekonem. Wracasz do nalotu i po 20 minutach rozlega się dzwonek do drzwi. Dostajesz pizzę. Siadasz z powrotem przed komputerem, jesz pizzę i kontynuujesz nalot.

Więc jaka jest różnica? W jeden sposób marnujesz 20-30 minut cennego czasu WOW, w drugi 20 $ plus napiwek.

epascarello
źródło
53
Jest mi smutno, że uważam to za zabawne.
Denis Hoctor
3
Muszę przyznać, że to może być najlepsze nieprogramistyczne wyjaśnienie, jakie widziałem od dłuższego czasu! świetny przykład!
Iban Dominguez Noda
Rozumiem i ta odpowiedź pomaga mi to zrozumieć, ale chcę teraz pizzę = / i prośba nie będzie kontynuowana, dopóki nie dostanę pizzy -_-
JMASTER B
Uwielbiam „przykłady nie programistyczne” !!
Cynthia Sanchez
@epascarello Zabawna strona działa naprawdę dobrze !!! Nie wspominając o tym, że można to zrozumieć. Muszę się z tobą skontaktować w sprawie projektu
Omar
19

Twoja strona jest dostarczana z serwera do przeglądarki klienta, gdzieś w Internecie. Przeglądarka narysowała stronę na ekranie i ktoś - lub coś - patrzy na nią. To gra na czekanie. Oczy poruszają się w przód iw tył, łapiąc ten lub inny szczegół w szybkich skokach, od czasu do czasu odbijając się w bok, od ekranu, aby zbadać, co rozprasza uwagę w otoczeniu. Zegar tyka. Strona świeci miękko, pasywnie, gdy użytkownik unosi się w miejscu nieaktywnym, z ręką luźno ułożoną nad myszą, z pochyloną szyją i coraz bardziej skupionym wzrokiem na czymś zachęcającym, co ma do zaoferowania strona.

Nagle, bez żadnego ostrzeżenia, kursor zaczyna się poruszać, gdy dłoń na myszy lekko sztywnieje i zaczyna szturchać mały plastikowy guzek po szorstkiej powierzchni stołu. Gdy myszka się porusza, jej surogat na ekranie porusza się w ścisłej imitacji, omijając ciekawe obrazy i dowcipne uwagi w treści Twojej strony. W końcu zostaje podjęta decyzja, ruch zatrzymuje się, mięsień lub dwa lekko się kurczą, a przycisk myszy zostaje wciśnięty przez natarczywy palec. Mikroprzełącznik myszy wyzwala impuls elektroniczny i nagle przeglądarka jest świadoma tego, co się stało: kliknięcie myszą.

W tym wszystkim wszystko, co zrobił użytkownik podczas przeglądania strony, stało się w sposób całkowicie nieprzewidywalny dla przeglądarki, dla każdego kodu klienta na twojej stronie internetowej, dla czegokolwiek, co znajduje się na twoich serwerach. Nie było żadnego znanego „czasu oczekiwania” pomiędzy ludzkimi działaniami. Działania zatem, przekazywane przez sprzęt podpięty do komputera użytkownika, następowały wtedy, gdy zachodziły, a nie według przewidywalnego zegara - to znaczy odbywały się asynchronicznie .

Spiczasty
źródło
3
+1 Niezła historia :) bardzo zachęcająca ... to sprawiło, że poruszyłem myszką i kliknąłem strzałkę „głosuj w górę”. A oto znowu zdarzenie asynchroniczne…
Felix Kling
1
Świetny przykład, wybór wydarzenia w przeglądarce jest po prostu świetny!
sjsam
18

Pomyśl o końcu wywiadu, a facet mówi: „Nie dzwoń do nas, my zadzwonimy”. To jest istota zdarzenia asynchronicznego.

Zwykle definiujesz funkcje i jawnie wywołujesz funkcje. Twój program ma strukturę, w której zaczyna się od linii 1, a następnie linii 2 i poza niektórymi kodami warunkowymi i iteracjami, funkcjami wywołującymi itp. Istnieje prosta, liniowa, synchroniczna struktura.

Ale w niektórych przypadkach masz akcje, które są wyzwalane przez zdarzenia poza bezpośrednią kontrolą programu, rzeczy, które pochodzą spoza programu, takie jak zdarzenia interfejsu użytkownika (użytkownik klika myszką) lub zdarzenie sieciowe (ktoś próbuje się połączyć Twój serwer). Twój kod nie generuje bezpośrednio tych zdarzeń. Są generowane poza programem użytkownika, często przez system operacyjny na podstawie monitorowania urządzeń interfejsu użytkownika i innych systemów. Nazywa się to zdarzeniami asynchronicznymi.

Pamiętaj tylko: „Nie dzwoń do nas, my zadzwonimy”

Rob Weir
źródło
12

„W programowaniu zdarzenia asynchroniczne to te, które występują niezależnie od głównego przepływu programu. Akcje asynchroniczne to działania wykonywane w schemacie nieblokującym, które pozwalają głównemu przepływowi programu kontynuować przetwarzanie”.

„Dzięki technologii Ajax aplikacje internetowe mogą pobierać dane z serwera asynchronicznie w tle bez zakłócania wyświetlania i zachowania istniejącej strony”.

Po kliknięciu Edytuj i zapisz w SO, dzieje się to asynchronicznie.

Dejan Marjanović
źródło
12

Zdarzenie asynchroniczne to zdarzenie, które działa poza głównym wątkiem aplikacji.

Najlepszym sposobem na zrozumienie jest porównanie ze zdarzeniami, które działają synchronicznie. Najbardziej typowym przykładem byłoby ładowanie strony internetowej.

Kiedy wszedłeś na tę stronę, kliknąłeś link i czekałeś na załadowanie strony i nie mogłeś wejść w interakcję z tą stroną ani z niej korzystać, dopóki się nie załadowała. Dla kontrastu, gdyby ta strona miała zdarzenie AJAX (czyli asynchroniczne zdarzenie JavaScript i XML) powiązane z jakąś akcją użytkownika, strona ta ładowałaby pewne dane z innego źródła asynchronicznie - równolegle (teoretycznie) z innymi działaniami.

Przykład z dwoma synchronicznymi zdarzeniami (A i B): Najpierw A coś robi. Kiedy A jest skończone, B coś robi.

Przykład z dwoma zdarzeniami asynchronicznymi (A i B): Zarówno A, jak i B robią coś w tym samym czasie i żadne zdarzenie nie czeka na drugie.

chaimp
źródło
7

Oto przykład operacji asynchronicznej w javascript (musisz mieć otwartą konsolę javascript)

console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!

Wywołanie do console.log('Two!')zostanie wykonane bez blokowania reszty kodu, który nastąpi po nim.

W prawdziwym scenariuszu zamień setTimeout na kliknięcie przycisku na stronie internetowej. W końcu reakcja na kliknięcie przycisku nastąpi, bez blokowania wykonywania innego kodu, takiego jak renderowanie strony.

statenjason
źródło
5

Mówiąc najprościej, oznacza to coś, co dzieje się po nieznanym czasie, więc nie oczekuj natychmiastowych rezultatów.

Na przykład „Mamo, czy mogę dostać pięć dolarów?”

Wyciągając rękę za pieniądze, oczekuję, że natychmiast zareaguje, dając mi pieniądze (synchronicznie).

Realistycznie będzie patrzeć na mnie przez chwilę, a potem zdecyduje się odpowiedzieć, kiedy będzie chciała (asynchronicznie).

Kai
źródło
2

Kiedy dwa różne wydarzenia występują niezależnie od siebie, nie możesz tego zrobić

task1
task2

bez sprawdzania, że ​​to task1naprawdę zakończone.

Teson
źródło
1

Zdarzenia asynchroniczne to te zdarzenia, których nie wiemy, kiedy wystąpią w przyszłości, na przykład, gdy serwer jest żądany dla jakiegoś pliku, którego nie wiemy, kiedy spełni nasze żądanie lub zdarzenia interfejsu użytkownika, których nie wiemy, kiedy użytkownik to zrobi kliknij przycisk lub inny element interfejsu użytkownika, ale pomimo tego dzieje się coś innego na stronie lub aplikacji, nic nie blokuje, powiedz, że strona wyszarzała cały interfejs, dopóki jakiś plik z serwera nie przychodzi lub dzieje się jakieś wydarzenie, wszystkie rzeczy są niezależne to jest moc zdarzeń asynchronicznych, powiedzmy po prostu niezależnych

czarny Jastrząb
źródło
0

Synchronous vs. Zdarzenia asynchroniczne

Niektóre programy obsługi zdarzeń są wywoływane natychmiast po wystąpieniu zdarzenia. Nazywa się to zdarzeniami „synchronicznymi”. Przykładem jest DocumentNew. Jest wywoływana, gdy tylko użytkownik utworzy nowy dokument.

Jednak niektóre zdarzenia są wywoływane wkrótce po wystąpieniu zdarzenia, zwykle po krótkim czasie bezczynności. Nazywa się to zdarzeniami „asynchronicznymi”. Są asynchroniczne, ponieważ zdestabalizowałoby to rozwiązanie Source Insight, gdyby makro napisane przez użytkownika zostało wywołane dokładnie w momencie wystąpienia zdarzenia.

Vitthal Walunj
źródło
0

Jeśli kod jest synchroniczny (lub zsynchronizowany), oznacza to, że każdy fragment kodu jest uruchamiany po kolei, sekwencyjnie, a następny fragment kodu nie może zostać uruchomiony, dopóki poprzedni nie zostanie ukończony. Większość kodu jest zwykle synchroniczna.

Jeśli kod jest asynchroniczny (lub asynchroniczny), oznacza to, że może działać osobno i niezależnie od innego kodu. Jeśli w środku zestawu kodu synchronizacji znajduje się kod asynchroniczny, w kontekście tego konkretnego pytania kod asynchroniczny zostanie uruchomiony tylko wtedy, gdy zostanie wyzwolone jego zdarzenie, niezależnie od tego, gdzie w kodzie synchronizacji go umieścisz. Jest całkowicie oddzielny i niezależny od kodu synchronizacji i jest uruchamiany zawsze, gdy nakazuje to zdarzenie, a nie tylko wtedy, gdy poprzedni fragment kodu został uruchomiony. Przykładem może być kod, który działa w określonych odstępach czasu, po pomyślnym zapisaniu pliku, wysłaniu żądania internetowego, kliknięciu przycisku przez użytkownika lub po załadowaniu obrazu.

Grant Gryczan
źródło