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

Pogled: 6958|Odgovoriti: 1

Večnitnost postavi razširljivost v slepo ulico

[Kopiraj povezavo]
Objavljeno na 6. 12. 2014 22:21:58 | | |
To je članek iz sveta Pythona, vendar je še vedno uporaben za celotno področje programiranja, čeprav večnitnost omogoča hitrejšo obdelavo zahtev, vendar obstaja tudi zgornja meja, zelene (mikroniti) niti so rešitev.

Večnitni razvoj programske opreme rešuje veliko težav, zlasti za omrežno usmerjene aplikacije, ki zahtevajo zahtevno zmogljivost za hitro odzivanje uporabnikom. Na žalost večnitnost ni dovolj za reševanje velikih težavSočasnostSpolne težave.

Reševanje teh težav zahteva spreminjanje programskih modelov z uporabo asinhronih dogodkov in mehanizmov, ki temeljijo na povratnih klicih. V Druvi smo ustvarili python knjižnico z imenom Dhaga za reševanje velikih težavSočasnost, medtem ko programski model ne zahteva pomembnih sprememb.

Razvijalci programske opreme živijo v eniSočasnostsveta. Thread so danes vrhunski državljani, še posebej med razvojem, še posebej, ko vaša aplikacija izvaja intenzivne omrežne operacije, kot je inSync (izdelek za sinhronizacijo omrežne varnosti), kot je Druva. Večnitnost omogoča preprost in urejen potek programske kode za omrežne operacije. Ko naša aplikacija potrebuje izboljšave ali izboljšave zmogljivosti, jo je mogoče izboljšatiElastičnost, lahko povečamo število niti.

A ko gre za tisoče merilSočasnostProšnje, teme niso dovolj.

Ugotovili smo, da ima večnitnost naslednje slabosti:
1. Sistemski odjemalec inSync mora varnostno kopirati veliko število datotek na strežnik preko omrežnih RPC klicev. Tipičen način, kako razvijalci pospešijo delo, je uporaba niti. Vendar pa zmogljivost, ki jo prinaša večnitnost, poveča stroške pomnilnika in procesorja; Razvijalci morajo ohranjati ravnovesje med hitrostjo in številom niti.

2. Naši strežniki morajo upravljati med inSync sistemom in tisoči strankSočasnostPovezave in obvestila. Za učinkovito upravljanje povezav uporabljamo niti za obdelavo zahtev. Vendar pa naraščajoče število strank sistema inSync pomeni tudi, da moramo še naprej povečevati število niti, kar porabi veliko strežniškega pomnilnika in procesorja.

3. Naš spletni strežnik mora obdelati na tisoče vzporednih HTTP zahtevkov. Večina dela je na omrežnih vtičnicah, ki sprejemajo in pošiljajo podatke ter jih posredujejo v ozadje sistema inSync. To povzroči, da večina niti čaka na omrežne operacije. Problem C10K povzroča to, da ko je na tisoče sinhronih zahtevkov do spletnega strežnika, je generiranje niti za vsako zahtevo precej nerazširljivo ().

Omejitve asinhronih ogrodij
Številni asinhroni ogrodji, vključno s Twisted, Tornado Tornado in asyncore, lahko razvijalcem pomagajo, da se oddaljijo od priljubljenih načinov uporabe niti. Ti okvirji se zanašajo na neblokirajoče vtičnice in mehanizme za povratni klic (podobno kot Node.js). Če bomo te ogrodja uporabljali takšne, kot so, bo treba glavne dele naše Druva kode refaktorirati. To ni tisto, kar želimo početi. Refaktoriranje kode podaljša razvojne in testne cikle, kar nam preprečuje izpolnjevanje zahtev glede obsega. Ker mora biti več delov izdelka ogromnih, jih bo moral vsak od nas refaktorirati – zato se trudimo podvojiti ali potrojiti.

Da bi se izognili prevelikim spremembam kode, smo se morali oddaljiti od neposredne uporabe obstoječega ogrodja. Na srečo smo našli nekaj uporabnih orodij.

Ker želimo nadzorovati izvajanje kode na omrežnem I/O, potrebujemo način, da nit razdelimo na mikro-niti. Ugotovili smoGreenlets。 Omogoča neimplicitno razporejanje mikroniti, imenovano korutinska korutina. Z drugimi besedami. Uporabno je, ko želite nadzorovati izvajanje svoje kode. Mikrothreade lahko zgradiš za prilagojene urnike, ker lahko nadzoruješ, kdaj greenlets prinašajo pavze. To je za nas popolno, ker nam daje popoln nadzor nad razporejanjem naše kode.

Tornado je preprosto, neblokirajoče ogrodje spletnega strežnika, napisano v Pythonu in zasnovano za obravnavo tisočev asinhronih zahtev. Uporabljamo njegovo osnovno komponento, IOLoop IOStream. IOLoop je neblokirajoča vtična I/O zanka dogodkov; Uporablja epoll (na Linuxu) ali vrste (BSD in Mac OS X), sicer izbere (na Windows), če so na voljo. IOStream ponuja neblokirajoče vtičnice, kot je priročno pakiranje za branje in pisanje. Vse operacije s socketi delegiramo Tornadu in nato uporabimo povratne klice za sprožitev kodnih operacij za dokončanje (banq opomba: zelo podobno kot Node.js mehanizem).

To je dober začetek, a potrebujemo več. Če zgornji modul uporabimo neposredno v naši kodi, bo veliko naše RPC kode treba spremeniti, na primer načrtovanje RPC prek greenletov, zagotavljanje, da greenlets ne blokirajo (če se greenlets zamašijo, bo zamašilo celotno nit in vse ostale), ter upravljanje callback funkcij iz tornada.

Potrebujemo abstrakcijo za upravljanje in urejanje zelenih listkov, da jih ne zamašimo z zunanjimi klici, ta abstrakcija pa je lahko izjemno razširljiva tudi onkraj niti. Ta abstrakcija je Dhaga, ki omogoča programiranje toka aplikacijske kode kot tradicionalno sinhrono zaporedje, vendar je izvajanje asinhrono.

Dhaga (iz hindijščine, kar pomeni nit) je okvir za izvajanje lahke niti, ki jo abstrahiramo. Razred Dhaga izhaja iz greenlets in uporablja preklapljanje sklada za izvajanje več tokov kode v eni niti operacijskega sistema. Niti enega operacijskega sistema izvajajo več dhagasov z uporabo sodelovalnega razporejanja. Kadarkoli dhaga čaka (predvsem čaka na vrnitev klica RPC), preda nadzor nadrejeni ravni (tj. kontekstu izvajanja niti na ravni OS, ki jo je ustvarila). Nadrejena raven nato načrtuje novo dhago, ki je pripravljena za izvedbo. Klic RPC se posreduje na spletni strežnik tornado, da asinhrono zapiše vtičnico, nato pa ob vrnitvi registrira povratni klic, in ko se ta RPC vrne, se čakajoči dhaga doda v izvedljivo vrsto in ga nato prevzame nadrejeni vlak. (Banq opomba: podobno kot node.js principu)

Dhaga lahko uporabimo namesto niti za operacije z visoko zakasnitvijo, in uporabimo 512 dhag v eni niti, kadar število niti preseže razumno mejo za prepustnost.







Prejšnji:Vzorec MVC ogrodja je mrtev
Naslednji:Prednosti in slabosti MVC ogrodij:
Objavljeno na 7. 12. 2014 17:22:55 |
Branje in objavljanje nazaj je vrlina
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