Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 12132|Odpoveď: 1

[Komunikácia] Pochopenie BIO a NIO

[Kopírovať odkaz]
Zverejnené 17. 5. 2019 15:34:50 | | |

Abstrakt: Pochopenie BIO a NIO
Nedávno som pravdepodobne pozrel zdrojový kód ZooKeeper a Mina a zistil som, že oba sú implementované v Java NIO, takže je potrebné zistiť, čo NIO vlastne je. Nasleduje moje vlastné zhrnutie založené na online informáciách, aby som ušetril čas, nakreslil som diagram nenútene, pokiaľ dokážem pochopiť význam.

Zavedenie:
BIO: Synchronous blocking IO, režim implementácie servera spočíva v pripojení jedného vlákna naraz, teda keď má klient požiadavku na pripojenie, server musí spustiť vlákno na spracovanie, ak toto spojenie nič nerobí, spôsobí zbytočnú záťaž vlákien, samozrejme, môže sa to zlepšiť mechanizmom poolu vlákien.
NIO: Synchronný neblokujúci IO, režim implementácie servera je jedna požiadavka na vlákno, teda požiadavka na pripojenie odoslaná klientom bude zaregistrovaná na multiplexeri a multiplexer spustí vlákno na spracovanie, keď má spojenie I/O požiadavku.
AIO (NIO.2): Asynchrónny neblokujúci IO, režim implementácie servera spočíva v tom, že efektívne požiada o jedno vlákno, pričom I/O požiadavky klienta najskôr dokončí OS a potom upozorní serverovú aplikáciu, aby spustila vlákno na spracovanie.

ŽIVOTOPIS
Synchronné blokovanie IO, myslím, že každý, kto sa naučil programovanie operačných systémov alebo akýkoľvek jazyk sieťového programovania, je oboznámený, v while slučke server volá metódu akceptovať, aby počkal na požiadavku na pripojenie prijímajúceho klienta, po prijatí požiadavky na spojenie môže byť na tejto komunikačnej zásuvke vytvorená komunikačná socket pre operácie čítania a zápisu, v tomto momente už nemôže prijímať ďalšie požiadavky na pripojenie klienta, môže len čakať na vykonanie operácie s aktuálne pripojeným klientom.
Ak chce BIO spracovávať viacero požiadaviek klientov súčasne, musí použiť viacvláknové spracovanie, teda zakaždým, keď prijímacie bloky čakajú na požiadavku klienta, po prijatí požiadavky na spojenie sa vytvorí komunikačný socket a otvorí sa nové vlákno na spracovanie požiadaviek na čítanie a zápis údajov tohto socketu, a potom okamžite pokračuje v prijímaní a čakaní na ďalšie požiadavky na pripojenie klienta, teda vytvorí sa vlákno pre spracovanie každého požiadavku na pripojenie jednotlivo, schéma pravdepodobne vyzerá takto:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

Hoci má server v súčasnosti vysokú súbežnosť, teda dokáže spracovať viaceré požiadavky klientov naraz, prináša to problém, pretože s rastúcim počtom otvorených vlákien sa spotrebúva príliš veľa pamäťových zdrojov, čo spôsobuje spomalenie alebo dokonca pád servera, a NIO dokáže tento problém do určitej miery vyriešiť.

NIO
Kľúčom k synchronnému neblokujúcemu IO je prijatie nápadu riadeného udalosťami na implementáciu multiplexora.
Najväčší rozdiel medzi NIO a BIO je, že stačí otvoriť vlákno na spracovanie IO udalostí od viacerých klientov.
Je to multiplexer, ktorý dokáže počúvať IO udalosti od viacerých klientov:
A. Ak server počúva požiadavku na pripojenie klienta, vytvorí pre ňu komunikačný socket (kanál v Jave) a potom sa vráti na pokračovanie v počúvaní.
B. Ak server počúva dáta odoslané od klienta, ktorý vytvoril komunikačný socket, zavolá príslušné rozhranie na spracovanie prijatých dát, a ak je súčasne viacero klientov, dáta môžu byť spracované postupne.
C. Počúvajte viaceré požiadavky na pripojenie klientov a prijímajte dátové požiadavky, a tiež počúvajte, kedy máte dáta na odoslanie.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


Stručne povedané, v jednom vlákne môžete zavolať multiplexovacie rozhranie (select v Jave), ktoré blokuje a počúva IO požiadavky od viacerých klientov súčasne, a po prijatí IO požiadavky sa zavolá zodpovedajúca funkcia na jej spracovanie.

Príslušné aplikačné scenáre
V tomto bode ste si možno všimli, že keď požiadavka dorazí (či už je viacero naraz alebo len jedna), bude zavolaná príslušná IO spracovateľská funkcia, takže:
(1) NIO je vhodný na spracovanie scenárov s veľkým počtom pripojení, ale pripojenia sú relatívne krátke (ľahká prevádzka), ako napríklad Jetty, Mina, ZooKeeper a podobne, ktoré sú všetky implementované na základe java nio.
(2) Metóda BIO je vhodná pre situácie, kde je počet pripojení relatívne malý a pevný, čo vyžaduje vysoké serverové zdroje a je obmedzené len na aplikácie.





Predchádzajúci:Rozdiel medzi ajaxom, axiosom a fetchom
Budúci:Open source rámec pre plánovanie úloh Quartz
Zverejnené 21. 5. 2019 19:32:33 |
Naučte sa učiť
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com