Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 12132|Atsakyti: 1

[Komunikatas] BIO ir NIO supratimas

[Kopijuoti nuorodą]
Paskelbta 2019-05-17 15:34:50 | | |

Anotacija: BIO ir NIO supratimas
Neseniai tikriausiai pažvelgiau į "ZooKeeper" ir "Mina" šaltinio kodą ir pastebėjau, kad jie abu yra įdiegti "Java NIO", todėl būtina išsiaiškinti, kas yra NIO. Toliau pateikiama mano santrauka, pagrįsta internetine informacija, norėdamas sutaupyti laiko, diagramą nupiešiau atsainiai, kol galiu pasiekti prasmę.

Įvadas:
BIO: Sinchroninis blokavimas IO, serverio diegimo režimas yra sujungti vieną giją, tai yra, kai klientas turi prisijungimo užklausą, serveris turi pradėti giją, kad būtų galima apdoroti, jei šis ryšys nieko nedaro, sukels nereikalingų gijų pridėtinių išlaidų, žinoma, jį galima patobulinti naudojant gijų telkinio mechanizmą.
NIO: sinchroninis neblokuojantis IO, serverio diegimo režimas yra viena užklausa vienai gijai, tai yra, kliento atsiųsta ryšio užklausa bus užregistruota multiplekseryje, o multiplekseris pradės apdorojimo giją, kai ryšys turės I/O užklausą.
AIO (NIO.2): asinchroninis neblokuojantis IO, serverio diegimo režimas yra efektyviai prašyti vienos gijos, o kliento įvesties / išvesties užklausas pirmiausia užpildo OS, o tada praneša serverio programai, kad pradėtų giją.

BIO
Sinchroninis blokavimas IO, manau, kad visi, kurie išmoko operacinės sistemos tinklo programavimo ar bet kokios kalbos tinklo programavimo, yra susipažinę, tuo tarpu kilpoje serveris iškvies priėmimo metodą, kad lauktų priimančio kliento prisijungimo užklausos, gavus prisijungimo užklausą, šiame ryšio lizde galima sukurti ryšio lizdą skaitymo ir rašymo operacijoms, šiuo metu jis nebegali gauti kitų kliento prisijungimo užklausų, gali tik laukti, kol bus atlikta operacija su šiuo metu prijungtu klientu.
Jei BIO nori vienu metu apdoroti kelias kliento užklausas, ji turi naudoti kelių gijų, tai yra, kiekvieną kartą, kai priimami blokai, laukia kliento užklausos, gavus prisijungimo užklausą, sukuriamas ryšio lizdas ir atidaroma nauja gija, skirta apdoroti šio lizdo duomenų skaitymo ir rašymo užklausą, o tada nedelsiant toliau priimti ir laukti kitų kliento prisijungimo užklausų, tai yra, kiekvienai kliento prisijungimo užklausai sukuriama gija, kuri turi būti apdorojama atskirai, schema tikriausiai yra tokia:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

Nors šiuo metu serveris turi didelį sutapimą, tai yra, jis gali apdoroti kelias kliento užklausas vienu metu, tai kelia problemų, nes didėjant atvirų gijų skaičiui, jis sunaudos per daug atminties išteklių, todėl serveris sulėtės ar net sugenda, o NIO gali tam tikru mastu išspręsti šią problemą.

NIO
Sinchroninio neblokuojančio IO raktas yra priimti įvykiais pagrįstą idėją, kad būtų įdiegtas multiplekseris.
Didžiausias skirtumas tarp NIO ir BIO yra tas, kad jums tereikia atidaryti giją, kad galėtumėte tvarkyti IO įvykius iš kelių klientų.
Tai multiplekseris, galintis klausytis IO įvykių iš kelių klientų:
A. Jei serveris klausosi kliento ryšio užklausos, jis sukurs jam ryšio lizdą (kanalą Java) ir grįš tęsti klausymąsi.
B. Jei serveris klausosi duomenų, siunčiamų iš kliento, kuris sukūrė ryšio lizdą, jis iškvies atitinkamą sąsają, kad apdorotų gautus duomenis, o jei vienu metu yra keli klientai, duomenys taip pat gali būti apdorojami paeiliui.
C. Klausykite kelių klientų prisijungimo užklausų ir gaukite duomenų užklausas, taip pat klausykite, kai turite duomenų, kuriuos norite siųsti.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


Trumpai tariant, vienoje gijoje, galite iškviesti multipleksavimo sąsają (pasirinkite Java), kad blokuotumėte ir klausytumėtės IO užklausų iš kelių klientų vienu metu, o gavus IO užklausą, atitinkama funkcija bus iškviesta ją apdoroti.

Atitinkami taikymo scenarijai
Šiuo metu galbūt pastebėjote, kad gavus užklausą (nesvarbu, ar ji yra kelios vienu metu, ar tik viena), bus iškviesta atitinkama IO apdorojimo funkcija, kad ją tvarkytų, taigi:
(1) NIO tinka tvarkyti scenarijus su dideliu jungčių skaičiumi, tačiau jungtys yra palyginti trumpos (lengvas veikimas), pvz., Jetty, Mina, ZooKeeper ir kt., kurios visos įgyvendinamos remiantis java nio.
(2) BIO metodas tinka scenarijams, kai ryšių skaičius yra palyginti mažas ir fiksuotas, o tai reikalauja didelių serverio išteklių ir apsiriboja programomis.





Ankstesnis:Skirtumas tarp "ajax" ir "axios" bei "fetch"
Kitą:Atvirojo kodo užduočių planavimo sistema Quartz
Paskelbta 2019-05-21 19:32:33 |
Išmokite mokytis
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com