Kakšna je razlika med arhitekturo, ki temelji na dogodkih Node.js, in več-navojnim programiranjem v drugih jezikih?


Odgovor 1:

Koda, ki jo vodijo dogodki in več-navojna paradigma, deluje v procesu operacijskega sistema.

Ko postopek vodi več niti, si te niti delijo procesni pomnilnik (naslovni prostor) tako za branje kot za pisanje.

JavaScript, ki poganja Node.js, je z enim navojem zasnovan. Zajamčeno je, da se vsaka funkcija zažene do zaključka in med izvajanjem funkcije se ne bo izvajala nobena druga koda JavaScript v trenutnem postopku. Naravni asinhroni dogodki (omrežje, vhodno-izhodni disk, časovniki, druga strojna oprema in dogodki operacijskega sistema) upravlja motor, ki v čakalno vrsto zanke dogodkov, ki se po njih izvede, doda funkcije JavaScript, registrirane kot upravljavci (ali povratne klice) za te dogodke. funkcije pred čakalno vrsto so končane.

V paradigmi z več navoji dve ali več niti vzporedno poganja kodo, tako da se med izvajanjem funkcije lahko drugi kos kode izvaja tudi v različnem procesorskem jedru, po možnosti branje ali pisanje na iste pomnilniške naslove. To lahko povzroči neskladno stanje pomnilnika, če koda ne uporablja posebnih mehanizmov operacijskega sistema (sinhronizacijski primitivi) za upravljanje dostopa do skupnega pomnilnika.



Odgovor 2:

To je dobro vprašanje, "Kakšna je razlika med arhitekturo, ki jo vodi Node.js, in večnamenskim programiranjem v drugih jezikih?".

To lahko nekoliko razčlenimo.

  • Vozlišča, ki temelji na arhitekturi.

Dogodkovna arhitektura ni ekskluzivna za vozlišče, npr. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (več jezikov).

  • Več-navojno programiranje v drugih jezikih.

Upoštevajte, da JavaScript po zasnovi ne podpira več niti. Čeprav podpira spletne delavce, ki, kolikor vem, lahko delujejo kot niti.

Torej, ki temelji na dogodkih, ni edinstveno za vozlišče, več vozlišč pa je mogoče storiti v vozlišču.

Tu lahko obstajata dve vprašanji: "Kakšna je razlika med dogodki, usmerjenimi v več niti, in" v čem je razlika med vozliščem in drugimi jeziki (okviri) ". Osredotočil se bom na slednje, saj se zdi, da je to vprašanje vprašanje.

Rekel bi, da je tisto, kar Node posebna, to, da ga je avtor ustvaril zato, da se izogne ​​blokiranju IO pri gradnji spletnih aplikacij. Kultura skupnosti vozlišč je poudarjati in graditi na moči, ki ne blokira IO. Ne boste našli preveč knjižnic tretjih oseb, ki izvajajo blokiranje klicev. Kot razvijalec, ki uporablja Node, verjetno ne boste naleteli na subtilne blokirne operacije v kodi. Medtem ko lahko v drugih jezikih naivni razvijalec po nesreči opravi zelo neučinkovito blokiranje klicev, kot je branje iz povezave z bazo podatkov.

Poleg tega bi morali resnično prebrati več modelov za "sočasnost" in razumeti prednosti in slabosti vsakega. Bonusne točke za razumevanje, zakaj je bilo večkratno navojevanje sprejemljivo tako dolgo.



Odgovor 3:

konceptualne razlike so precej enostavne, da si ovijete glavo.

V arhitekturi, ki temelji na dogodkih, se program izvaja v neprekinjeni zanki z enim navojem (v vozlišču lahko naredite več navojev, vendar o tem ne skrbite zdaj). Ko se dogodek sproži, je na naboru klicev opravljeno delo, ki ga je treba obravnavati v prostem času.

Multi-nitna arhitektura običajno pošlje novo nit, ko mora čakati na dejanje. Torej, pokličete v bazo podatkov in vrete novo nit, ki bo izvedla vse, kar potrebujete, in storila, kar morate, in zaključila ali se ponovno pridružila izvirni niti.

Obe metodi sta zelo koristni za različne stvari. Dogodki so odlični za uporabniški vmesnik in strežnike, ker vaš program ne ve, kdaj se bo zgodil nov, pogosto pa se dogodki pojavijo. Medtem ko je rezanje navojev potrebno za računsko težka opravila, pri katerih želite razbiti težavo na veliko manjše koščke (ali se približujete omejitvi svoje ene navojne zanke).