Asynchronous vs synchrone uitvoering, wat is het belangrijkste verschil?

Wat is het verschil tussen asynchrone en synchrone uitvoering?


1, Autoriteit 100%

Wanneer u iets synchroon uitvoert, wacht u erop om te eindigen voordat u verder gaat met een andere taak. Wanneer u iets asynchroon uitvoert, kunt u verder gaan met een andere taak voordat deze is voltooid.

Dat gezegd hebbende, in de context van computers, vertaalt dit in het uitvoeren van een proces of taak op een andere “draad”. Een draad is een reeks commando’s (een blok van code) die bestaat als een werkeenheid. Het besturingssysteem kan meerdere threads beheren en een draad een stuk (“Snijd”) van de processortijd toewijzen voordat u overstapt op een andere thread om het een beurt te geven om wat werk te doen. In zijn kern (gratie van de woordspeling) kan een processor eenvoudig een opdracht uitvoeren, het heeft geen concept van twee dingen in één keer. Het besturingssysteem simuleert dit door plakjes tijd aan verschillende draden toe te wijzen.

Nu, als u meerdere kernen / processors introduceert in de mix, dan kunnen de dingen op hetzelfde moment daadwerkelijk gebeuren. Het besturingssysteem kan de tijd toewijzen aan één draad op de eerste processor en vervolgens hetzelfde tijdstip aan een andere thread op een andere processor toewijzen. Dit alles gaat over het toestaan ​​van het besturingssysteem om de voltooiing van uw taak te beheren terwijl u door kunt gaan in uw code en andere dingen doen.

Asynchrone programmering is een gecompliceerd onderwerp vanwege de semantiek van hoe dingen samenbinden wanneer je ze tegelijkertijd kunt doen. Er zijn talloze artikelen en boeken over het onderwerp; Kijk eens!


2, Autoriteit 66%

synchroon / asynchroon heeft niets te maken met multi-threading.

Synchroon of Gesynchroniseerdbetekent op de een of andere manier “verbonden” of “afhankelijk”. Met andere woorden, twee synchrone taken moeten van elkaar op de hoogte zijn en de ene taak moet op een of andere manier worden uitgevoerd die afhankelijk is van de andere, zoals wachten om te beginnen totdat de andere taak is voltooid.
Asynchroon betekent dat ze volledig onafhankelijk zijn en dat geen van beide op enigerlei wijze rekening moet houden met de ander, zowel bij de initiatie als bij de uitvoering.

Synchroon (één draad):

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

Synchroon (multi-threaded):

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

Asynchroon (één thread):

        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-->| 

Asynchroon (multi-threaded):

thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • Begin- en eindpunten van taken A, B, C weergegeven door <, >tekens.
  • CPU-tijdsegmenten weergegeven door verticale balken |

Technisch gezien heeft het concept van synchroon/asynchroon niets te maken met threads. Hoewel het in het algemeen ongebruikelijk is om asynchrone taken op dezelfde thread te vinden, is het mogelijk (zie hieronder voor voorbeelden) en is het gebruikelijkom twee of meer taken synchroon te vinden op afzonderlijkethreads… Nee, het concept van synchroon/asynchroon heeft uitsluitendte maken met het al dan niet starten van een tweede of volgende taak voordat de andere (eerste) taak is voltooid , of dat het moet wachten. Dat is alles. Op welke thread (of threads), of processen, of CPU’s, of inderdaad, op welke hardware de taak[en] worden uitgevoerd, is niet relevant. Om dit punt duidelijk te maken heb ik de afbeeldingen bewerkt om dit te laten zien.


ASYNCHROON VOORBEELD:

Bij het oplossen van veel technische problemen is de software ontworpen om het algemene probleem op te splitsen in meerdere afzonderlijke taken en deze vervolgens asynchroon uit te voeren. Het omkeren van een matrix, of een eindige elementen analyse probleem, zijn goede voorbeelden. In de informatica is het sorteren van een lijst een voorbeeld. De quicksort-routine splitst bijvoorbeeld de lijst in twee lijsten en voert een quicksort op elk van hen uit, waarbij zichzelf recursief (quicksort) wordt genoemd. In beide bovenstaande voorbeelden kunnen (en werden) de twee taken asynchroon uitgevoerd. Ze hoeven niet in aparte threads te staan. Zelfs een machine met één CPU en slechts één uitvoeringsdraad kan worden gecodeerd om de verwerking van een tweede taak te starten voordat de eerste is voltooid. Het enige criterium is dat de resultaten van de ene taak niet nodig zijn als input voor de andere taak. Zolang de begin- en eindtijden van de taken elkaar overlappen (alleen mogelijk als de uitvoer van geen van beide nodig is als invoer voor de andere), worden ze asynchroon uitgevoerd, ongeacht hoeveel threads er in gebruik zijn.

synchrone voorbeeld:

Elk proces bestaande uit meerdere taken waarbij de taken in volgorde moeten worden uitgevoerd, maar men moet op een andere machine worden uitgevoerd (fetch en / of update-gegevens, een stock-offerte van de financiële dienst, enz.). Als het op een afzonderlijke machine staat, is het op een afzonderlijke draad, hetzij synchroon of asynchroon.


3, Autoriteit 37%

In eenvoudiger termen:

synchroon

U bevindt zich in een wachtrij om een ​​filmticket te krijgen. Je kunt er geen krijgen totdat iedereen voor je er een krijgt, en hetzelfde geldt voor de mensen die in de wachtrij achter je staan.

asynchrone

U bevindt zich in een restaurant met veel andere mensen. Je bestelt je eten. Andere mensen kunnen ook hun eten bestellen, ze hoeven niet te wachten tot je voedsel wordt gekookt en aan je geserveerd voordat ze kunnen bestellen.
In de keuken hebben restaurantarbeiders continu koken, dienen en het nemen van bestellingen.
Mensen krijgen hun eten geserveerd zodra het is gekookt.


Antwoord 4, autoriteit 5%

Synchrone uitvoeringbetekent dat de uitvoering in een enkele reeks plaatsvindt. A->B->C->D. Als je die routines aanroept, zal Alopen, dan eindigen, dan zal Bbeginnen, dan eindigen, dan zal Cstarten, enz.

Met Asynchrone uitvoeringbegin je een routine en laat je deze op de achtergrond draaien terwijl je aan je volgende begint, en zeg je op een gegeven moment “wacht tot dit klaar is”. Het is meer als:

StartA->B->C->D->Wachtop Aom af te ronden

Het voordeel is dat u B, Cen of Dkunt uitvoeren terwijl Anog actief is (op de achtergrond, in een aparte thread), zodat u uw bronnen beter kunt benutten en minder “hangt” of “wachten” heeft.


Antwoord 5, autoriteit 3%

In een notendop verwijst synchronisatie naar de starten eindpunten van twee of meer processen, NIEThun uitvoeringen. In dit voorbeeld is het eindpunt van proces A gesynchroniseerd met het beginpunt van proces B:

SYNCHROON
  |--------Een--------|
           |--------B--------|

Aan de andere kant hebben asynchrone processen niethun start- en eindpunten gesynchroniseerd:

ASYNCHROON
  |--------Een--------|
     |--------B--------|

Waar Proces A Proces B overlapt, worden ze gelijktijdig uitgevoerd of synchroon(woordenboekdefinitie), vandaar de verwarring.

UPDATE: Charles Bretana heeft zijn antwoordverbeterd, dus dit antwoord is nu slechts een eenvoudig (mogelijk te vereenvoudigd) geheugensteuntje.


Antwoord 6, autoriteit 3%

Synchroon betekent dat de beller wacht op het antwoord of de voltooiing, asynchronousdat de beller doorgaat en een reactie later komt (indien van toepassing).

Als voorbeeld:

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

Dit levert altijd:

Before call
In call
After call

Maar als we doSomethingasynchronouszouden maken (meerdere manieren om het te doen), dan zou de output zoukunnen worden:

Before call
After call
In call

Omdat de methode die de asynchrone aanroep doet onmiddellijk zou doorgaan met de volgende regel code. Ik zeg “zou kunnen”, omdat de volgorde van uitvoering niet kan worden gegarandeerd met asynchrone bewerkingen. Het kan ook worden uitgevoerd als het origineel, afhankelijk van de timing van de thread, enz.


Antwoord 7, autoriteit 2%

Synchroniseren versus asynchroniseren

Syncen asyncbewerkingen gaan over het uitvoeren van bestelleneen next taskin relatienaar de current task

Laten we een voorbeeld bekijken waarbij Task 2current taskis en Task 3een next taskis . Taak is een atomaire bewerking – methodeaanroep in een stapel (methodeframe)

Synchroon– houdt in dat taken één voor één worden uitgevoerd. Een next taskwordt pas gestart nadat current taskis voltooid. Task 3wordt pas gestart als Task 2is voltooid

Enkele thread + synchronisatie – sequentieelGebruikelijke uitvoering. Pseudocode:

main() {
    task1()
    task2()
    task3()
}

Multi Thread + Sync – Parallel– geblokkeerd. Geblokkeerd betekent dat een thread gewoon wacht (hoewel het iets nuttigs kan doen. bijv. Java ExecutorService[ Over]en Future[Over]) Pseudocode:

main() {
    task1()
    Future future = ExecutorService.submit(task2())
    future.get() //<- blocked operation
    task3()
}

Asynchroon– houdt in dat de taak de controle onmiddellijk teruggeeft met de belofte om een code uit te voeren en later op de hoogte te stellen van het resultaat (bijv. terugbellen, functie). Task 3wordt uitgevoerd, zelfs als Task 2niet is voltooid. async callback, completion handler[Over]

Enkele thread + Async – gelijktijdigCallback Queue(Message Queue) en Event Loop(Run Loop, Looper) worden gebruikt. Event Loopcontroleer of Thread Stackleeg is en als het waar is wordt het eerste item van de Callback Queuenaar Thread Stacken herhaalt deze stappen opnieuw. Simpele voorbeelden zijn klikken op een knop, een evenement plaatsen… Pseudocode:

main() {
    task1()
    ThreadMain.handler.post(task2());
    task3()
}

Multi Thread + Async – Gelijktijdig en parallelNiet-blokkerend. Bijvoorbeeld wanneer je wat berekeningen moet maken op een andere thread zonder te blokkeren. Pseudocode:

main() {
    task1()
    new Thread(task2()).start();
    //or
    Future future = ExecutorService.submit(task2())
    task3()
}

Je kunt het resultaat van taak 2 gebruiken met een blokkeermethode get()of met async callbackvia een loop

Bijvoorbeeld in de mobiele wereld waar we een gebruikersinterface/hoofdthread hebben en we iets moeten downloaden, hebben we verschillende opties:

  • syncblok – blokkeer UI-thread en wacht wanneer het downloaden is voltooid. Gebruikersinterface reageert niet.
  • asynccallback – maak een nieuw loopvlak met een asynchrone callback om de gebruikersinterface bij te werken (het is niet mogelijk om toegang te krijgen tot de gebruikersinterface vanuit een niet-UI-thread). Terugbellen naar de hel.
  • asynccoroutine[Over]– asynchrone taak met syntaxis synchroniseren. Het maakt een mix-downloadtaak (functie stopzetten) met UI-taak mogelijk

[iOS synchronisatie / async] , [Android Sync / Async]

[paralel vs gelijktijdig]


8, Autoriteit 2%

Ik denk dat dit een beetje rond is – overleg, maar toch verduidelijkt het met behulp van het echte leven voorbeeld.

Klein voorbeeld:

Laten we zeggen dat het spelen van een audio drie stappen omvat:

  1. Krijg het gecomprimeerde nummer van Harddisk
  2. decomprimeer de audio.
  3. Speel de ongecomprimeerde audio.

Als uw audiospeler opeenvolgens stap 1,2,3 voor elk nummer, is deze synchroon. Je zult een tijdje moeten wachten om het lied te horen totdat het nummer daadwerkelijk wordt opgehaald en gedecomprimeerd.

Als uw audiospeler stap 1,2,3 onafhankelijk van elkaar doet, is het asynchroon. d.w.z.
Tijdens het afspelen van audio 1 (stap 3), als het audio 3 van harde schijf parallel (stap 1) opheft en de audio 2 parallel decompuleert. (stap 2 )
Je komt terecht bij het horen van het nummer zonder veel te wachten voor fetch en decompress.


9

Ik heb een GIF gemaakt om dit uit te leggen, hoop behulpzaam te zijn:
Kijk, lijn 3 is asynchroon en anderen zijn synchroon.
Alle lijnen vóór regel 3 moeten wachten tot vóór de lijn zijn werk afmaken, maar vanwege lijn 3 is asynchroon, volgende regel (lijn 4), wacht niet op regel 3, maar lijn 5 moet wachten op regel 4 om zijn werk te wachten, en lijn 6 moeten wachten op lijn 5 en 7 voor 6, omdat regel 4,56,7 niet asynchroon zijn.


10

Gewoon gezegd dat asynchrone uitvoering dingen op de achtergrond doen.

Als u bijvoorbeeld een bestand van internet wilt downloaden, kunt u daarvoor een synchrone functie gebruiken, maar deze blokkeert uw thread totdat het downloaden van het bestand is voltooid. Hierdoor kan uw applicatie niet meer reageren op gebruikersinvoer.

In plaats daarvan zou je het bestand op de achtergrond kunnen downloaden met een asynchrone methode. In dit geval keert de downloadfunctie onmiddellijk terug en wordt de uitvoering van het programma normaal voortgezet. Alle downloadbewerkingen worden op de achtergrond uitgevoerd en uw programma krijgt een melding wanneer het klaar is.


Antwoord 11

Als een heel eenvoudig voorbeeld,

SYNCHROON

Stel je drie scholieren voor die de opdracht krijgen om een estafetteloop op een weg te lopen.

1e leerling loopt haar opgegeven afstand, stopt en geeft het stokje door aan de 2e. Niemand anders is begonnen te rennen.

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

Als de 2e leerling het stokje terughaalt, begint ze haar opgegeven afstand te lopen.

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

De 2e leerling heeft haar schoenveter losgemaakt. Nu is ze gestopt en weer vastgebonden. Hierdoor is de eindtijd van de 2e verlengd en de starttijd van de 3e vertraagd.

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

Dit patroon gaat door totdat de 3e het stokje van de 2e terughaalt en de race beëindigt.

ASYNCHROON

Stel je voor dat 10 willekeurige mensen op dezelfde weg lopen.
Ze staan natuurlijk niet in de rij, maar lopen gewoon willekeurig op verschillende plaatsen op de weg in verschillende snelheden.

De veter van de 2e persoon is losgeraakt. Ze stopte om het weer vast te binden.

Maar niemand wacht op haar om het vast te binden. Alle anderen lopen nog steeds op dezelfde manier als voorheen, in hetzelfde tempo als dat van hen.

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

Antwoord 12

Synchroon betekent in feite dat je maar één ding tegelijk kunt uitvoeren. Asynchroon betekent dat je meerdere dingen tegelijk kunt uitvoeren en dat je het huidige niet hoeft af te ronden om door te gaan naar het volgende.


Antwoord 13

Bij het uitvoeren van een reeks zoals: a>b>c>d>, als we tijdens de uitvoering een fout krijgen, zoals:

a
b
c
fail

Dan beginnen we opnieuw vanaf het begin:

a
b
c
d

dit is synchroon

Als we echter dezelfde volgorde moeten uitvoeren: a>b>c>d>, en we hebben een storing in het midden:

a
b
c
fail

…maar in plaats van opnieuw te beginnen vanaf het begin, beginnen we opnieuw vanaf het punt van falen:

c
d

…dit staat bekend als asynchroon.


Antwoord 14

Gebruik een voorbeeld van instructies voor het maken van een ontbijt

  1. Schenk een kopje koffie.
  2. Verhit een pan en bak twee eieren.
  3. Bak drie plakjes spek.
  4. Toast twee sneetjes brood.
  5. Voeg boter en jam toe aan de toast.
  6. Schenk een glas sinaasappelsap.

Als je ervaring hebt met koken, voer je die instructies asynchroon uit. je zou beginnen met het opwarmen van de pan voor eieren, en dan met het spek. Je zou het brood in de broodrooster doen en dan de eieren beginnen. Bij elke stap van het proces start u een taak en richt u vervolgens uw aandacht op taken die klaar zijn voor uw aandacht.

Ontbijtenis een goed voorbeeld van asynchroonwerk dat niet parallel loopt. Eén persoon (of thread) kan al deze taken aan. Als we de ontbijtanalogie voortzetten, kan één persoon asynchroon ontbijten door de volgende taak te starten voordat de eerste is voltooid. Het koken gaat door, of er nu wel of niet iemand naar kijkt. Zodra je de pan voor de eieren begint op te warmen, kun je het spek gaan bakken. Zodra het spek begint, kun je het brood in de broodrooster doen.

Voor een parallel algoritme heb je meerdere cooks (of threads) nodig. De een maakte de eieren, de ander het spek, enzovoort. Elk zou zich op slechts die ene taak concentreren. Elke kok (of draad) zou synchroon worden geblokkeerd, wachtend tot het spek klaar is om om te draaien, of de toast om te knallen.

Referentie van Asynchrone programmeerconcepten


Antwoord 15

Je verwart synchroon met parallel versus serie. Synchroon betekent allemaal tegelijk. Gesynchroniseerd betekent aan elkaar gerelateerd, wat in serie of met een vast interval kan betekenen. Terwijl het programma alles doet, draait het in serie. Koop een woordenboek … daarom hebben we ongezoete thee. Je hebt thee of gezoete thee.


Antwoord 16

Een synchrone bewerking doet zijn werk voordat hij terugkeert naar de beller.

Een asynchrone bewerking doet (de meeste of al) zijn werk nadat hij is teruggekeerd naar de beller.


Antwoord 17

Met betrekking tot de “tegelijkertijd” definitie van synchrone uitvoering (wat soms verwarrend is), is hier een goede manier om het te begrijpen:

Synchrone uitvoering: Alle taken binnen een codeblok worden allemaal tegelijkertijd uitgevoerd.

Asynchrone uitvoering: Alle taken binnen een codeblok worden niet allemaal tegelijkertijd uitgevoerd.


Antwoord 18

Ik denk dat een goede manier om erover na te denken een klassieke lopende estafetterace is

Synchroon: Processen zoals leden van hetzelfde team, ze zullen niet worden uitgevoerd totdat ze het stokje hebben ontvangen (einde van de uitvoering van het vorige proces/runner) en toch werken ze allemaal synchroon met elkaar anders.

Asynchroon: waar processen zoals leden van verschillende teams op hetzelfde estafettecircuit, zullen ze lopen en stoppen, asynchroon met elkaar, maar binnen dezelfde race (algemene uitvoering van het programma).

Is het logisch?


Antwoord 19

Een andere Engelse definitie van Synchronize is Hier

Coördineren; combineren.

Ik denk dat dat een betere definitie is dan ‘gebeurt op hetzelfde moment’. Dat is ook een definitie, maar ik denk niet dat het past bij de manier waarop het wordt gebruikt in de informatica.

Dus een asynchrone taak wordt niet gecoördineerd met andere taken, terwijl een synchrone taak IS gecoördineerd met andere taken, dus de ene is klaar voordat de andere begint.

Hoe dat wordt bereikt, is een andere vraag.


Antwoord 20

Synchroon betekent dat de uitvoering van de wachtrij één voor één wordt uitgevoerd. Stel dat er alleen een voertuig is dat gedeeld moet worden met vrienden om hun bestemming te bereiken, één voor één zal het voertuig worden gedeeld.
In asynchroon geval kan elke vriend een gehuurd voertuig krijgen en zijn bestemming bereiken.


Antwoord 21

Ja synchroon betekent tegelijkertijd, letterlijk, het betekent samen werken. meerdere mensen/objecten in de wereld kunnen meerdere dingen tegelijk doen, maar als we naar de computer kijken, staat er synchroon betekent dat de processen samenwerken, wat betekent dat de processen afhankelijk zijn van de terugkeer van elkaar en daarom worden ze één uitgevoerd na de andere in de juiste volgorde. Terwijl asynchroon betekent dat processen niet samenwerken, kunnen ze tegelijkertijd werken (indien op multithread), maar onafhankelijk werken.

Other episodes