Mi a különbség a Node.js eseményvezérelt architektúrája és a többszálú programozás között más nyelveken?


Válasz 1:

Mind a rendezvényvezérelt, mind a többszálú paradigma esetében a kód fut egy operációs rendszer folyamatában.

Amikor a folyamat több szálat fut, ezek a szálak megosztják a folyamatmemóriát (címtér) az olvasáshoz és az íráshoz egyaránt.

A Node.js-t támogató JavaScript tervezete egyetlen menetes. Minden funkció garantáltan befejeződik, és a függvény futtatása során a jelenlegi folyamatban nem jelenik meg más JavaScript kód. A természetesen aszinkron eseményeket (hálózati, lemezbemeneti-output, időzítők, egyéb hardverek és operációs rendszerek eseményei) a motor kezeli, amely hozzáadja ezeknek az eseményeknek a kezelőiként regisztrált JavaScript funkcióit (vagy visszahívásokat) az esemény hurok sorához, amelyet végre kell hajtani. a sor előtti funkciók befejeződtek.

A többszálú paradigmában két vagy több szál párhuzamosan futtatja a kódot, tehát egy funkciófuttatás során egy másik kóddarab is futhat egy másik processzormagon, esetleg ugyanazon memóriacímeken olvasva vagy írva. Ez a memória inkonzisztens állapotát eredményezheti, kivéve, ha a kód speciális operációs rendszer mechanizmusokat (szinkronizációs primitíveket) használ a megosztott memória elérésének kezelésére.



Válasz 2:

Ez egy jó kérdés: "Mi a különbség a Node.js eseményvezérelt architektúrája és a többszálú programozás között más nyelveken?"

Ezt kicsit le tudjuk osztani.

  • A csomópont eseményvezérelt architektúrája.

Az eseményvezérelt architektúra nem kizárólagos a Node számára, például a Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (több nyelv).

  • Többszálú programozás más nyelveken.

Vegye figyelembe, hogy a JavaScript tervezése alapján nem támogat több szálat. Bár támogatja a webmunkárokat, amelyek, amennyire tudom, szálakként működhetnek.

Tehát az eseményvezérelt nem csak a Node számára jellemző, és a többszálú végrehajtás csomópontban is elvégezhető.

Tehát itt lehet két kérdés: „Mi a különbség az eseményvezérelt és a többszálú menetválasztás között” és a „Mi a különbség a csomópont és a többi nyelv (keretek) között”. Az utóbbira fogok összpontosítani, mivel ez látszik a kérdés szándéka.

Azt mondanám, hogy a Node különlegessége az, hogy a szerző azzal a céllal hozta létre, hogy elkerülje az IO blokkolását a webes alkalmazások építésekor. A csomópontközösség kultúrája a nem blokkoló IO hangsúlyozása és az ezekre épülő erő kiépítése. Nem fog túl sok olyan harmadik fél könyvtárat találni, amely blokkolja a hívásokat. A Node-t használó fejlesztőként valószínűtlen, hogy finoman blokkoló műveleteket hajt végre a kódjában. Míg más nyelveken egy naiv fejlesztő véletlenül rendkívül nem hatékony blokkoló hívásokat hajthat végre, például egy adatbázis-kapcsolatból történő olvasást.

Ettől eltekintve, valóban el kell olvasnia a „párhuzamosság” több modelljét, és meg kell értenie mindegyik előnyeit és hátrányait. Bónuszpontok annak értékelésére, hogy miért volt elfogadható a többszálú menet ilyen hosszú ideig.



Válasz 3:

a fogalmi különbségeket elég könnyű körültetni a fejedbe.

Eseményközpontú architektúra esetén a program folyamatos, egyszálú hurokban fut (végezhet többszálú menetet a csomópontban, de most nem kell ezzel aggódnia). Amikor egy esemény tüzet bocsát ki, egy feladat fel van állítva a híváskötegben, amelyet szabadidős programokkal kell kezelni.

A többszálú architektúra általában egy új szálat küld, amikor várnia kell egy műveletet. Tehát felhív egy adatbázist, és létrehoz egy új szálat, amely elvégzi az összes szükséges dolgot, és megteszi azt, amire szüksége van, és lezárja vagy újra csatlakozik az eredeti szálhoz.

Mindkét módszer nagyon hasznos különféle dolgokhoz. Az eseményvezérelt program nagyszerű a felhasználói felület és a kiszolgálók számára, mivel a program nem tudja, mikor történik új esemény, és gyakran az események sorozatba kerülnek. Míg a menetezés szükséges olyan számítási szempontból nehéz munkákhoz, ahol a problémát sokkal kisebb részekre kívánja bontani (vagy ha közeledik az egyetlen menetes hurok határához).