Wat is het verschil tussen asynchrone en synchrone uitvoering?
Als je iets synchroon uitvoert, wacht je tot het klaar is voordat je verder gaat met een andere taak. Wanneer je iets asynchroon uitvoert, kun je naar een andere taak gaan voordat die klaar is.
In de context van computers betekent dit het uitvoeren van een proces of taak op een andere "thread." Een thread is een reeks commando's (een blok code) die bestaat als een eenheid van werk. Het besturingssysteem kan meerdere threads beheren en aan een thread een stuk ("slice") processortijd toewijzen voordat op een andere thread wordt overgeschakeld om die een beurt te geven om wat werk te doen. In de kern (vergeef me de woordspeling) kan een processor gewoon een commando uitvoeren, hij heeft geen idee van twee dingen tegelijk doen. Het besturingssysteem simuleert dit door tijdsdelen toe te wijzen aan verschillende threads.
Als je nu meerdere kernen/processoren in de mix brengt, dan KUNNEN dingen wel tegelijkertijd gebeuren. Het besturingssysteem kan tijd toewijzen aan een thread op de eerste processor, en vervolgens hetzelfde blok tijd toewijzen aan een andere thread op een andere processor. Dit alles gaat over het toestaan dat het besturingssysteem de voltooiing van uw taak beheert terwijl u verder kunt gaan in uw code en andere dingen kunt doen.
Asynchroon programmeren is een ingewikkeld onderwerp vanwege de semantiek van hoe dingen samenhangen als je ze tegelijkertijd kunt doen. Er zijn talloze artikelen en boeken over dit onderwerp; kijk er maar eens naar!
Synchrone uitvoering betekent dat de uitvoering in een enkele serie gebeurt. A->B->C->D
. Als je deze routines aanroept, zal A
lopen, dan eindigen, dan zal B
starten, dan eindigen, dan zal C
starten, enz.
Met Asynchrone uitvoering, begin je een routine, en laat je die op de achtergrond lopen terwijl je de volgende start, en dan zeg je op een gegeven moment "wacht tot dit klaar is". Het's meer als:
Start A->B->C->D->
Wacht tot A
klaar is
Het voordeel is dat je B
, C
, en of D
kunt uitvoeren terwijl A
nog draait (in de achtergrond, op een aparte thread), zodat je beter gebruik kunt maken van je bronnen en minder "hangs" of "waits" hebt.
Simpel gezegd is asynchrone uitvoering dingen doen op de achtergrond.
Als je bijvoorbeeld een bestand van het internet wilt downloaden, zou je een synchrone functie kunnen gebruiken om dat te doen, maar het zal je thread blokkeren totdat het bestand klaar is met downloaden. Dit kan je applicatie ongevoelig maken voor gebruikersinvoer.
In plaats daarvan zou je het bestand in de achtergrond kunnen downloaden met behulp van een asynchrone methode. In dit geval keert de download functie onmiddellijk terug en gaat de programma-uitvoering normaal verder. Alle downloadbewerkingen worden op de achtergrond uitgevoerd en uw programma krijgt een melding wanneer het'klaar is.