Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 12132|Odgovoriti: 1

[Komunikacija] Razumevanje BIO in NIO

[Kopiraj povezavo]
Objavljeno na 17. 05. 2019 15:34:50 | | |

Povzetek: Razumevanje BIO in NIO
Nedavno sem verjetno pogledal izvorno kodo ZooKeeperja in Mine ter ugotovil, da sta oba implementirana v Java NIO, zato je treba ugotoviti, kaj NIO sploh je. Sledi moj lasten povzetek na podlagi spletnih informacij; da bi prihranil čas, sem diagram narisal mimogrede, dokler lahko dosežem pomen.

Uvod:
BIO: Sinhroni blokirajoči IO, način implementacije strežnika je, da se poveže ena nit naenkrat, torej ko ima odjemalec zahtevo za povezavo, mora strežnik začeti nit za obdelavo; če ta povezava ne naredi ničesar, bo to povzročilo nepotrebno obremenitev niti, seveda pa se to lahko izboljša z mehanizmom bazena niti.
NIO: Sinhroni neblokirajoči IO, način implementacije strežnika je ena zahteva na nit, kar pomeni, da je zahtevek za povezavo, ki ga pošlje odjemalec, registriran na multiplekserju, multiplekser pa začne nit za obdelavo, ko ima povezava vhodno/izhodno zahtevo.
AIO (NIO.2): Asinhroni neblokirajoči vhodni izhod, način strežniške implementacije je dejansko zahtevati eno nit, pri čemer OS najprej zaključi vhodno/izhodne zahteve odjemalca, nato pa obvesti strežniško aplikacijo, da začne nit za obdelavo.

ŽIVLJENJEPIS
Sinhrono blokiranje IO, verjamem, da je vsak, ki se je učil programiranja operacijskih sistemov ali katerega koli jezika omrežnega programiranja, seznanjen; v while zanki strežnik pokliče metodo sprejema, da počaka na zahtevo za povezavo prejemnika, ko je zahteva za povezavo prejeta, se lahko na tem komunikacijskem vtiču vzpostavi komunikacijska vtičnica za operacije branja in pisanja, takrat ne more več prejemati drugih zahtevkov za povezavo odjemalcev, lahko le čaka na izvedbo operacije s trenutno povezanim odjemalcem.
Če želi BIO hkrati obdelovati več zahtevkov odjemalcev, mora uporabiti večnitnost, torej vsakič, ko sprejemni bloki čakajo na zahtevo odjemalca, ko je zahtevek za povezavo prejet, se vzpostavi komunikacijski vtičnik in odpre nova nit za obdelavo zahteve za branje in pisanje podatkov tega vtičnika, nato pa takoj nadaljuje sprejemanje in čakanje na druge zahteve za povezavo odjemalcev, torej se ustvari nit za obdelavo vsake zahteve za povezavo odjemalca posebej, shema je verjetno takšna:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

Čeprav ima strežnik trenutno visoko sočasnost, torej lahko hkrati obravnava več zahtev odjemalcev, se pojavi težava, saj se z naraščajočim številom odprtih niti porabi preveč pomnilniških virov, kar povzroči upočasnitev ali celo zrušitev strežnika, kar lahko NIO do neke mere reši.

NIO
Ključ do sinhronega neblokirajočega IO je sprejeti idejo, ki temelji na dogodkih, za implementacijo multiplekserja.
Največja razlika med NIO in BIO je, da moraš odpreti nit le za obdelavo IO dogodkov več odjemalcev.
Gre za multiplekser, ki lahko posluša IO dogodke več odjemalcev:
A. Če strežnik prisluhne zahtevi za povezavo odjemalca, vzpostavi komunikacijsko vtičnico zanj (kanal v Javi) in nato nadaljuje poslušanje.
B. Če strežnik posluša podatke, poslane od odjemalca, ki je ustvaril komunikacijsko vtičnico, bo poklical ustrezni vmesnik za obdelavo prejetih podatkov, in če je hkrati več odjemalcev, se lahko podatki tudi obdelajo nazaj.
C. Poslušajte več zahtevkov za povezavo strank in prejemajte zahteve za podatke, prav tako pa poslušajte, kdaj imate podatke za pošiljanje.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


Na kratko, v eni niti lahko pokličete multipleksirni vmesnik (select v javi), da blokirate in poslušate IO zahteve več odjemalcev hkrati, in ko je IO zahtevek prejet, se pokliče ustrezna funkcija za njegovo obdelavo.

Ustrezni scenariji uporabe
Do tega trenutka ste morda opazili, da ko zahteva prispe (ne glede na to, ali jih je več hkrati ali samo ena), se pokliče ustrezna funkcija za obdelavo vhodno-vhodnih operacij, da jo obdela, torej:
(1) NIO je primeren za obravnavo scenarijev z velikim številom povezav, vendar so povezave razmeroma kratke (lahko delujejo), kot so Jetty, Mina, ZooKeeper itd., ki so vsi implementirani na osnovi java nio.
(2) Metoda BIO je primerna za scenarije, kjer je število povezav razmeroma majhno in fiksno, kar zahteva visoke strežniške vire in je omejeno na aplikacije.





Prejšnji:Razlika med ajaxom in axiosom ter fetchom
Naslednji:Odprtokodni okvir za razporejanje nalog Quartz
Objavljeno na 21. 05. 2019 19:32:33 |
Uči se učiti
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com