Kuo skiriasi „Node.js“ įvykių pagrįsta architektūra ir daugiapakopis programavimas kitomis kalbomis?


Atsakymas 1:

Tiek įvykių, tiek daugiapakopėje paradigmoje kodas veikia operacinės sistemos procese.

Kai procesas vykdomas keliomis gijomis, šios gijos yra naudojamos proceso atmintyje (adreso srityje) skaityti ir rašyti.

„JavaScript“, suteikiantis galią „Node.js“, yra vientisas. Kiekviena funkcija garantuojama, kad ji bus baigta, ir jo metu nebus vykdomas joks kitas „JavaScript“ kodas dabartiniame procese. Natūraliai asinchroninius įvykius (tinklo, disko įvesties-išvesties, laikmačius, kitą aparatinę ir operacinės sistemos įvykius) tvarko variklis, kuris prie įvykių ciklo eilės, kuri turi būti vykdoma, prideda „JavaScript“ funkcijas, užregistruotas kaip šių įvykių tvarkytojas (arba atšaukimas). funkcijos priešais eilę baigtos.

Įvairių sriegių paradigmoje du ar daugiau gijų paleidžia kodą lygiagrečiai, todėl vykdant funkciją skirtingas kodo gabalas taip pat gali veikti kitame procesoriaus šerdyje, galbūt skaitant ar rašant tais pačiais atminties adresais. Tai gali sukelti nenuoseklią atminties būseną, jei kodas nenaudoja specialių operacinės sistemos mechanizmų (sinchronizacijos primityvų), kad valdytų prieigą prie bendrosios atminties.



Atsakymas 2:

Tai geras klausimas: „Kuo skiriasi„ Node.js “įvykių pagrįsta architektūra ir daugiapakopis programavimas kitomis kalbomis?“.

Mes galime ir turime tai šiek tiek sugriauti.

  • Mazgo įvykių pagrįsta architektūra.

Įvykių pagrįsta architektūra nėra išskirtinė mazgui, pvz., „Tornado“ („Python“), „Vertx“ („Java“), „Akka“ („Scala“), „ReactiveX“ (keliomis kalbomis).

  • Daugiapakopis programavimas kitomis kalbomis.

Atminkite, kad „JavaScript“ pagal savo dizainą nepalaiko kelių gijų. Nors ji palaiko internetinius darbuotojus, kurie, kiek aš žinau, gali veikti kaip gijos.

Taigi, įvykių nulemtas mazgas nėra unikalus, o mazgas gali būti atliekamas su daugybe gijų.

Taigi čia gali kilti du klausimai: „Kuo skiriasi įvykis, pagrįstas daugybe gijų,“ ir „Kuo skiriasi mazgas ir kitos kalbos (sistemos)“. Aš sutelksiu dėmesį į pastarąją, nes atrodo, kad tai yra klausimo tikslas.

Aš sakyčiau, kad mazgas ypatingas tuo, kad autorius jį sukūrė siekdamas išvengti internetinio blokavimo kuriant žiniatinklio programas. „Node“ bendruomenės kultūra yra pabrėžti ir blokuoti IO stiprybę. Nerasite per daug trečiųjų šalių bibliotekų, kurios blokuoja skambučius. Kaip kūrėjas, naudojantis „Node“, vargu ar atliksite subtilius savo kodo blokavimo veiksmus. Kitomis kalbomis naivus kūrėjas gali netyčia atlikti labai neefektyvius skambučių blokavimo veiksmus, pavyzdžiui, skaityti iš duomenų bazės ryšio.

Išskyrus tai, jūs tikrai turėtumėte perskaityti apie kelis „lygiavertiškumo“ modelius ir suprasti kiekvieno pranašumus ir trūkumus. Premijos taškai už tai, kodėl taip ilgai buvo priimtina kelių siūlų kūrimas.



Atsakymas 3:

konceptualius skirtumus gana lengva apvynioti.

Įvykių sąlygotoje architektūroje jūsų programa vykdoma ištisine sriegiu (galite keletą kartų sriegti mazge, bet šiuo metu nesijaudinkite). Kai įvykis užsidega, darbas kyla prie skambučių kamino, kurį reikia spręsti laisvalaikio programose.

Įvairių gijų architektūra paprastai išsiunčia naują giją, kai ji turi laukti veiksmo. Taigi jūs paskambinate į duomenų bazę ir suaktyvinote naują giją, kuri atliks visus jums reikalingus dalykus ir padarys tai, ko jums reikia, ir užbaigs arba vėl prisijungs prie pradinės gijos.

Abu šie metodai yra labai naudingi skirtingiems dalykams. Įvykiai, pagrįsti įvykiais, yra puikūs vartotojo sąsajai ir serveriams, nes jūsų programa nežino, kada įvyks naujas įvykis, ir dažnai įvykiai bus užfiksuoti. Sriegimas yra būtinas atliekant skaičiavimo sunkumus reikalaujančius darbus, kai norima problemą suskaidyti į daug mažesnius gabalus (arba artėjate prie vienos srieginės kilpos ribos).