Koja je razlika između Node.js-ove arhitekture zasnovane na događajima i programa s više navoja u drugim jezicima?


Odgovor 1:

I u događajima i višečlanoj paradigmi kod se pokreće unutar procesa operativnog sustava.

Kada proces pokreće više niti, ove niti dijele procesnu memoriju (adresni prostor) i za čitanje i za pisanje.

JavaScript koji pokreće Node.js jednodijelni je dizajnom. Zajamčeno je da se svaka funkcija izvodi do završetka, a niti jedan drugi JavaScript kôd u trenutnom procesu neće se pokrenuti tijekom izvođenja funkcije. Prirodno asinhroni događaji (mreža, ulazno-izlazni disk, tajmeri, ostali hardverski i operativni sustav) upravlja motor koji dodaje JavaScript funkcije registrirane kao rukovatelji (ili povratne pozive) za ove događaje u red petlje događaja koji će se izvršiti nakon funkcije ispred reda su završene.

U paradigmi s više navoja dva ili više niti paralelno pokreću kod, tako da se tijekom izvođenja funkcije različit komad koda može izvoditi i na drugoj jezgri procesora, možda čitanju ili pisanju na iste memorijske adrese. To može rezultirati u neskladnom stanju memorije ako se kod koda ne koriste posebni mehanizmi operativnog sustava (primitivi za sinkronizaciju) za upravljanje pristupom zajedničkoj memoriji.



Odgovor 2:

Ovo je dobro pitanje, "Koja je razlika između Node.js-ove arhitekture zasnovane na događajima i programa s više navoja u drugim jezicima?".

To možemo i trebamo malo razbiti.

  • Čvor arhitektura koja se temelji na događajima

Arhitektura pokretana događajima nije isključiva za Node, npr. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (više jezika).

  • Programi s više navoja na drugim jezicima.

Imajte na umu da JavaScript po dizajnu ne podržava više niti. Iako podržava mrežne radnike, koji, koliko znam, mogu funkcionirati kao teme.

Dakle, event-driven nije specifičan za čvor i multi-threading se može obaviti u čvoru.

Ovdje mogu postojati dva pitanja: "Koja je razlika između događaja usmjerenog na više i više navoja" i "Koja je razlika između čvora i drugih jezika (okvira)". Usredotočit ću se na ovo posljednje jer je to namjera pitanja.

Rekao bih da je ono što Node čini posebnim to što ga je autor stvorio u svrhu izbjegavanja blokiranja IO-a pri izradi web aplikacija. Kultura zajednice čvorova treba naglasiti i nadograditi na snagu ne-blokirajućeg IO-a. Nećete pronaći previše trećih knjižnica koje obavljaju blokirajuće pozive. Kao programer koji koristi Node, malo je vjerojatno da ćete naići na suptilne blokade u vašem kodu. Dok u drugim jezicima, naivni programer može slučajno izvršiti vrlo neučinkovito blokiranje poziva poput čitanja iz veze s bazom podataka.

Osim toga, trebali biste stvarno pročitati o više modela za "istovremenost" i razumjeti prednosti i nedostatke svakog od njih. Bonusni bodovi za uvažavanje zašto je višestruko navojenje prihvatljivo tako dugo.



Odgovor 3:

konceptualne razlike prilično su lako omotati glavu.

U arhitekturi koja se temelji na događajima vaš program se pokreće u kontinuiranoj petlji s jednim navojem (možete napraviti nekoliko višeslojnih navoja u čvoru, ali ne brinite se za to trenutno). Kad se dogodi neki događaj, na splavu poziva je posao koji treba rješavati u slobodno vrijeme.

Multi-nitna arhitektura općenito šalje novu nit kad mora čekati na akciju. Dakle, upućujete poziv u bazu podataka i vrtate novu nit koja će izvršiti sve što vam treba i izvršiti ono što trebate te zaključiti ili ponovno pridružiti izvornu nit.

Obje ove metode su vrlo korisne za različite stvari. Događaji su izvrsni za korisničko sučelje i poslužitelje, jer vaš program ne zna kada će se dogoditi novo, a često se događaji pojave. Iako je urezivanje navoja potrebno za računske teške poslove gdje želite riješiti problem na mnogo manje komade (ili se približavate granici svoje jednostruke petlje).