Asinhrono programiranje: vrste, klasifikacija, načela programiranja, koncept, pomen in uporaba

Asinhrono programiranje (AP) je oblika vzporednega programiranja, ki omogoča, da strukturna enota sistema deluje ločeno od glavne niti aplikacije. Ko je opravilo končano, glavno nit obvesti, ali je bilo opravilo končano ali ne. Takšno programiranje je ugodno, ker poveča podprto pasovno širino, zaradi česar je privlačno zaradi vse večje potrebe interneta po visoko skalabilnih sistemih.

Asinhroni programski modeli

Za obravnavo kontinuitete rezultatov neblokiranih operacij po njihovem zaključku so bili oblikovani različni modeli AP. Njihove prednosti se ocenjujejo glede na to, koliko se približujejo zaporedni shemi.

Asinhroni programski modeli

Vrste modelov AP:

  1. Model stopenjskega nadaljevanja. To je najpogosteje uporabljena asinhrona funkcija v vozlišču Node JS. Vsaka funkcija prejme informacije o tem, kako naj obravnava rezultat uspeha ali neuspeha v operaciji.
  2. Model dogodkov - model dogodkov, uporablja arhitekturo, ki temelji na dogodkih in omogoča, da operacije, ki ne blokirajo, sporočijo svoj zaključek z znaki uspeha ali neuspeha, za sinhronizacijo je potrebna korelacija.
  3. Model obljube - model obljube, ki ga pojasnjujejo povratne vrednosti neblokirnih operacij ne glede na časovni trenutek, v katerem so bile prejete določene vrednosti uspeha ali neuspeha.
  4. Model generatorja - Model generatorja. Generatorji se uporabljajo za začasno vrnitev nadzora kličočemu programu, nato pa se vrnejo v podprogram tako, da ponovno vzpostavijo stanje na točki, na kateri je bil program ustavljen.

Arhitekturna načela vozlišča

Čeprav je bil Node JS nedavno deležen ostrih kritik zaradi uporabe računskih zank, ki so posledica enonitnega okolja, je njegova filozofija treh močnih arhitekturnih načel še vedno aktualna.

JavaScript je asinhroni, tako kot Node. platforma za izvajanje JavaScript na strani strežnika, Node.js je bil predstavljen leta 2009 in uporablja asinhronski model I/O, ki temelji na dogodkih, zaradi česar je učinkovit in skalabilen.

Klepet je najbolj tipičen primer večuporabniške aplikacije Node.js v realnem času. Začenši z IRC za številne lastniške in odprte protokole na nestandardnih pristaniščih, je bilo mogoče vse implementirati v sodobni Noje.js z vtičnicami WebSockets, ki privzeto tečejo na istih vratih 80 in poslušajo nova sporočila, ki jih pošiljajo njihovi odjemalci. Na strani odjemalca je stran HTML z več konfiguriranimi obdelovalniki, enim za gumb "Pošlji", ki izbere sporočilo in ga pošlje v vtičnico WebSocket, in drugim, ki posluša sporočila, ki prihajajo v odjemalca. Očitno gre za preprost in osnovni model, ki pa temelji na drugačni kompleksnosti variance.

Neaktivni model, ki ga Node JS uporablja v svojem API za podporo asinhronemu programiranju, je korak k nadaljevanju. Vsaka neblokirna operacija dobi kot zadnji parameter funkcijo, ki vključuje logiko nadaljevanja. Po končani operaciji bo poklican za obdelavo rezultatov v primeru uspeha in za odpravo napak. Funkcija continue omogoča, da blokirni operaciji poveste, kako naj nadaljuje po zaključku operacije.

Arhitekturna načela vozlišč

Zaporedni nadzor pretoka

Za nadaljevanje v tem modelu je treba vsako naslednjo funkcijo verižiti kot nadaljevanje prejšnje, pri čemer se rezultati obravnavajo v primeru uspeha ali neuspeha. To vodi do diagonalizacije kode, ki je bila zaradi pomanjkanja praktične obvladljivosti poimenovana piramida pekla (callback hell), dokler število zaporednih verig raste minimalno.

Zaporedni nadzor pretoka

Vzporednost - asinhrono izvajanje neblokirnih operacij je takojšnje, saj se njihov preprost klic po definiciji izvaja v ozadju. Za spreminjanje blokirajočih operacij v neblokirajoče je potreben majhen proces enkapsulacije, ki izvaja operacijo v ozadju.

Asinhrono izvajanje neblokirnih operacij

Sinhronizacija funkcij nadaljevanja

Na koncu vsakega vzporednega zaporedja funkcij zaključevanja je potrebna veriga, ki uporablja določeno logiko šele po tem, ko, ko je potrjeno, da so vse vzporedne veje zaključene. Za izvajanje tega preverjanja se uporabljajo diagrami, ki temeljijo na števcih.

Sinhronizacija funkcij nadaljevanja

Primer z nadaljevalniki:

  1. Vzporednost, zanka omogoča, da se vsi neblokirani pari branje-račun izvedejo na neblokiran način.
  2. zaporedje, vsak par branj se prebere s korakom nadaljevalne funkcije.
  3. Sinhronizacija, vsaka vzporedna veja dobi zadnje nadaljevanje, ki izvede zaključno logiko takoj, ko so vse veje zaključene.

Knjižnice kontinuitete

Obstajajo številne knjižnice, ki lahko pomagajo poenostavitev življenja razvijalcem, ki delajo z modelom AP. Nekatere od njih niso povezane le z AP, temveč tudi s funkcionalno paradigmo, ki izhaja iz dejstva, da so mehanizmi za izvajanje združevanja v bistvu funkcionalne prednosti.

Vrste knjižnic:

  1. Async je verjetno najbolj znana in najpogosteje uporabljena knjižnica za asinhrono programiranje, ki temelji na kontinuatorjih. Za funkcije, ki ne blokirajo, ponuja različne metode nadzora pretoka.
  2. Join - je implementacija metode sinhronizacije, ki jo lahko najdemo v drugih jezikih, na primer v jeziku C in pri delu z nitmi. Uporablja se lahko tudi v obljubah, čeprav je v tem primeru njegova uporaba manj pomembna.
  3. Fn.js je odlična knjižnica, ki implementira različne funkcionalne metode nadzora. Njegova praktična uporabnost v tem kontekstu je povezana z možnostmi, ki jih ponuja za generiranje funkcij brez blokiranja in uporabo preverjanja.

Prednosti in slabosti

Asinhrono programiranje, ki temelji na nadaljevanju, je dobra možnost za situacije z enostavno logiko nadzora toka. Običajno to velja za programe v vozlišču Node JS, ki omogočajo opredelitev odzivanja brez blokiranja na dohodne zahteve.

Prednosti modela:

  1. Enostavne sheme zahtev in odzivov.
  2. Skladnost s shemami funkcionalnega programiranja.
  3. Enostaven za razumevanje kot konceptualni mehanizem.

Slabosti:

  1. Če nadzorna logika ni ustrezno zasnovana, postane postopek še bolj zapleten, posledica pa je koda z razpršeno funkcionalno logiko, ki jo je težko brati, razumeti in vzdrževati.
  2. Težave pri opredelitvi logike nadzora pretoka.
  3. Prefinjeni mehanizmi za sinhronizacijo, ki jih je mogoče prilagoditi.
  4. Nadzorna logika je porazdeljena na vsako neblokirno vejo.

Model, ki temelji na dogodkih

Dogodek je signal v poslovnem ekosistemu. Anatomsko so običajno sestavljeni iz vrste, časovnega žiga in niza podatkov, ki opisujejo kontekst, v katerem se je dogodek zgodil. Arhitektura, ki temelji na dogodkih (EDA), zagotavlja mehanizem za komunikacijo med strankami in ponudniki v razmerju 1:N in z nominalno ločitvijo. Ena od njegovih številnih aplikacij je odpravljanje težav pri asinhroni obdelavi podatkov.

V centraliziranih arhitekturah, ki temeljijo na dogodkih, je osrednji posrednik komunikacijskega vodila odgovoren za zagotavljanje učinkovitosti postopka registracije odjemalcev, ki poslušajo, in sprožanja obvestil na zahtevo prodajalcem. Ta mehanizem omogoča moč N:N, shema pa se imenuje vzorec PUB/SUB.

V porazdeljenih arhitekturah, ki temeljijo na dogodkih, je vsak ponudnik odgovoren za upravljanje naročnin svojih strank in pošiljanje obvestil ob pojavu dogodka. Tudi komunikacijski mehanizem je nominalno ločen, vendar je običajno število ponudnikov in odjemalcev 1:N. To ustreza opazovanemu vzorcu ali virom dogodkov v žargonu Node JS.

Računska abstrakcija: obljuba

Računska abstrakcija: obljuba

Obljuba je računalniška abstrakcija, ki predstavlja zavezo, da bo klicana neblokirna operacija posredovala odziv kličočemu programu, ko bo ta po zaključku prejel rezultat. Obljuba je objekt, ki zagotavlja dve metodi, ki omogočata logiko obdelave v primeru uspeha ali neuspeha.

Imajo preprost življenjski cikel, ki ga morate poznati, če želite delati z njimi. Bistvena vrednost obljube je v dveh načelih. Prvič, procesna logika se uporabi samo enkrat v primeru uspeha ali neuspeha. In drugič, zagotavlja, da je logika uspešna ali neuspešna, tudi če je obljuba rešena pred, kot bo uvedeni so bili njegovi vozniki. Če je potrebno, obljuba počaka na svoje obdelovalce, asinhrono Programiranje v javascriptu.

Obstaja na več načinov dobiti obljube, ki jih je mogoče prepoznati kot konstrukcijske vzorce, ki se redno pojavljajo pri uporabi tega modela. Definicija ES6 vključuje obljube in Node JS različice 0.12 ima podporo za to specifikacijo. Poleg tega obstaja več knjižnic, ki implementirajo model obljub. Za primerjalni referenčni okvir je bil opredeljen standard Promises A+, ki ureja vse izvedbe s takrat razpoložljivimi.

Sinhrono in asinhrono programiranje

Priporočamo, da uporabite JavaScript AP, naložite vse njegove oznake in kodo prodajalca iz njega. To zagotavlja najboljšo združljivost z največjim številom. Ta dodelitev daje vsem prodajnim oznakam največ možnosti za dokončanje sledenja, preden se obiskovalec premakne na naslednjo stran.

Sinhrono nalaganje se pojavi, ko mora brskalnik ustaviti prikazovanje strani, da bi dokončal izvajanje kode JavaScript. Če zazna sinhrono oznako JS, blokira prikaz strani, dokler se koda ne zaključi. To je podobno kot počasi vozeči tovornjak na cesti, za katerim se upočasnjuje en vozni pas. Sodobna spletna mesta so se od te metode odmaknila, ker predstavlja neposredno tveganje za zamudo pri nalaganju strani.

Pomanjkljivost te metode je, da se celotno spletno mesto ne more zagnati, dokler se oznaka ne naloži v celoti. Čeprav imajo dobavitelji oznak sklenjene sporazume o ravni storitev za obdobje dobave, lahko na uspešnost vpliva več dejavnikov. Mednje spadajo počasen odzivni čas, povezan s prodajalcem, vzdrževanje nepotrebnih aplikacijskih strežnikov v hibridnem modelu odjemalec-strežnik in počasen internetni promet. Če uporabnik nalaga oznake sinhrono, je priporočljivo zagotoviti, da ima dobavitelj odzivni čas 100 milisekund (ms) ali hitreje.

Sinhrono in asinhrono programiranje prek vmesnikov API sta vmesnika za programiranje aplikacij, ki vračata podatke za zahteve takoj oziroma pozneje. Sinhroni in asinhroni API-ji omogočajo takojšnje ali načrtovane zahteve za vire, podatke ali storitve, ko so ti na voljo. Sodobna metoda, za spletna mesta je asinhrono nalaganje oznak.

Pri tej metodi se koda JavaScript prikazuje vzporedno z ostalo vsebino strani. To pomeni, da tudi če se oznaka dobavitelja počasi odziva ali nalaga, ne bo upočasnila preostalega dela strani. S tem pristopom lahko ločite oznake JavaScript, ki se nalagajo neodvisno, asinhrona metoda pa tudi zmanjša vpliv nalaganja zunanjih datotek JS na proces upodabljanja strani.

Razumevanje in profiliranje C #

Razumevanje in profiliranje C #

Microsoft in skupnost .NET so močno poenostavili AP z implementacijo asinhronega čakanja v jeziku C. Najnovejše različice ASP.NET aktivno uporabljajo za izboljšanje zmogljivosti. Številna orodja za spremljanje zmogljivosti in profiliranje poskušajo podpirati in prikazati zmogljivost asinhronega programiranja 1C. Izdelki s predpono Stackify & Retrace imajo odlično podporo za aplikacije, ki uporabljajo C # async await. Najprej moramo razumeti, kako koda, ki uporablja async awai, dejansko deluje" in HttpClient kot primer.

Razumevanje in profiliranje C #

Z uporabo programa ILSpy si lahko ogledate, kako prevajalnik pretvori to kodo v stroj AsyncState. Stroj končnega stanja izvaja vso kompleksno kodo pod krinko, kar razvijalcem omogoča pisanje asinhrone kode.

HttpClient kot primer

Profiliranje asinhronega programiranja v jeziku C 5 0 je težavno, ker prečka niti. Tradicionalno se metoda in vsi klici metod njenih otrok pojavljajo v isti niti. Tako je lažje razumeti razmerje med starševskimi in podrejenimi metodami. Z asinhrono kodo je zgodba drugačna. Nadrejena metoda se izvaja v eni niti. Ko se začne operacija I/O, se koda v tej niti konča. Ko se operacija I/O zaključi, se koda nadaljuje v novi niti. Povezovanje kode med temi nitmi kot del večje transakcije je težavno.

AIOHTTP: strežnik-odjemalec za asyncio

Aiohttp - uporabnikom omogoča ustvarjanje asinhronih strežnikov in odjemalcev. Asinhroni programski paket aiohttp deluje za odjemalčeve in strežniške spletne vtičnice. Dokumentacija iz tega primera aiohttp se uporablja za zajem strani HTML.

AIOHTTP: strežnik-odjemalec za asyncio

Ta primer prikazuje, kako naložiti eno ali več datotek, datoteke pa lahko prenesete tudi prek. Določa nekaj novih elementov, kot je asynctimeout. To ustvari upravitelja konteksta čakalnega časa. Spodnja koda ustvari asinhrono sinhronizacijsko zanko in jo uporabi kot glavna funkcija.

Ustvarite objekt Client Session v glavni asinhroni programski funkciji in soprogramsko funkcijo, ki zbira URL vsega, kaj je potrebno prenesi. V prenosnem koraku ustvari upravitelja konteksta, ki teče približno X sekund. Po tem številu X sekund upravitelju konteksta poteče veljavnost. Nato uporabite funkcijo get () seje, ki najde objekt odziva.

Ko razvijalec ustvari atribut vsebine za objekt odziva, vrne aiohttp. StreamReader, ki uporabniku omogoča prenos datoteke poljubne velikosti. Ko je datoteka prebrana, se zapiše na lokalni disk. Nato uporabite funkcijo response () za dokončanje obdelave odgovora. V skladu z dokumentacijo implicitno kliče release (). Vendar je asinhrono programiranje v Pythonu nedvomno boljša rešitev za. To funkcijo je bolje pustiti, da preprečite nadaljnje težave. Obstaja en razdelek, ki zaklene del kode, ki se zapisuje na disk, medtem ko ostane koda zaklenjena. Uporaba protokola aiohttp - pravi način Izboljšajte delovni tok, saj uporabnikom ni treba porabiti časa za ustvarjanje strežnika, nalaganje povezav in pisanje asinhronih datotek, kar skrajša čas ustvarjanja projekta.

Asinhrono programiranje omogoča večjo učinkovitost programske opreme, saj ni blokiranega izvajanja dolgotrajnih procesov ali interakcije z uporabnikom, tako pri razvoju aplikacij v vozlišču kot v brskalniku.

Članki na tem področju