Wat ass den Ënnerscheed tëscht der Event gedréinter Architektur vun Node.js a Multithread Programméierung an anere Sproochen?


beäntweren 1:

A béid Event-driven a multithreaded Paradigme gëtt de Code an engem Betribssystem Prozess ausgefouert.

Wann de Prozess verschidde Threads leeft, deelen dës Threads de Prozess Memory (Adressraum) fir Liesen a Schreiwen.

JavaScript, wat Node.js dréckt, ass iergendwéi single-threaded. All Funktioun ass garantéiert komplett ausgefouert ze ginn, a keng aner JavaScript Code gëtt am aktuelle Prozess während dëser Funktioun Ausféierung ausgefouert. Déi natierlech asynchrone Eventer (Netzwierker, Disk Input / Output, Timer, aner Hardware an Betribssystemer Eventer) ginn vum Motor veraarbecht, wat de JavaScript Funktiounen ageschriwwen registréiert als Handler (oder Callbacks) fir dës Evenementer an den Event LoopQuee fir ausgefouert ze ginn. éier d'Ried fäerdeg ass.

Am multithreaded Paradigma hunn zwee oder méi Threads parallel Code ausgeführt, sou datt während engem funktionnelle Run, en anert Stéck Code kann och op engem anere Prozessor Kär ausgefouert ginn, méiglecherweis liesen oder schreiwen op déiselwecht Erënnerungsadressen. Dëst kann zu engem inkonsekvente Späicherzoustand féieren, ausser de Code benotzt spezielle Betribssystemmechanismen (Synchroniséierungs Primitiven) fir den Zougang zum gemeinsame Gedächtnis ze managen.



beäntweren 2:

Dëst ass eng gutt Fro: "Wat ass den Ënnerscheed tëscht der event-gedriwwener Architektur vun Node.j an Multithread-Programméierung an anere Sproochen?"

Mir kënnen a sollten dëst e bësse reduzéieren.

  • Event-gedreit Architektur vum Node

Déi event-gedreit Architektur ass net exklusiv fir Node geduecht, z.B. B. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (verschidde Sproochen).

  • Multithread Programméierung an anere Sproochen.

Notéiert datt JavaScript net méi vill Threads standard ënnerstëtzt. Et ënnerstëtzt Webaarbechter, déi, a mengem Wësse, als thread kënnen handelen.

Event-driven ass dofir net nëmme fir Noden verfügbar, a Multithreading kann an Noden duerchgefouert ginn.

Et kann also zwou Froen sinn: "Wat ass den Ënnerscheed tëscht Event-Undriff a Multithreading" an "Wat ass den Ënnerscheed tëscht Node an aner Sproochen (Kaderen)". Ech fokusséieren op dee Lescht well dëst schéngt d'Intent vun der Fro ze sinn.

Déi speziell Saach iwwer Node ass datt den Autor et erstallt huet fir I / O ze blockéieren beim Web-Uwendungen. D'Kultur vun der Node Gemeinschaft ass fir d'Stäerkt vum net-blockéierende I / O ze betounen an op ze bauen. Dir fannt net ze vill Drëtt-Parteibibliothéike déi Appellen blockéieren. Als Entwéckler deen Node benotzt, sidd Dir onwahrscheinlech subtile Blockaden an Ärem Code ze stoussen. An anere Sprooche kann en naive Entwéckler zoufälleg ganz effizient blockéierend Uruff maachen, sou wéi B. Liesen aus enger Datebankverbindung.

Dat gesot gëtt, Dir sollt wierklech méi iwwer verschidde "Parallelismus" Modeller liesen an d'Virdeeler vun de Virdeeler vun all eenzel wëssen. Bonus Punkten fir ze erkennen firwat Multithreading sou laang akzeptabel war.



beäntweren 3:

D'Konzeptuell Differenzen si relativ einfach fir Äre Kapp ze wéckelen.

An der event-gedriwwener Architektur leeft Äre Programm an enger kontinuéierter single-threaded Loop (Dir kënnt e puer Threading am Node maachen, awer Dir musst Iech deem Moment keng Suergen maachen). Wann en Event ausgeléist gëtt, gëtt et eng Aarbecht am Uruffstack dee soll an der fräier Zäit vum Programm verschafft ginn.

Multithreaded Architektur ausléist meeschtens en neie Fuedem wann et op eng Aktioun muss waarden. Also gitt Dir an eng Datebank an erstellt en neie Fuedem, deen all déi néideg Aufgaben maacht an déi néideg Schrëtt maacht fir den originale thread ofzeschléissen oder nei unzetrieden.

Béid Methode si ganz nëtzlech fir verschidden Zwecker. Event-driven ass super fir Benotzerinterfaces a Serveren well Äre Programm net weess wann en neit Event geschitt an d'Evenementer dacks a spurts optrieden. Wärend Fuedem ass noutwendeg fir computationally intensiv Aarbechtsplazen, wou Dir e Problem an vill méi kleng Deeler wëll opdeelen (oder d'Grenz vun Ärer eenzeger Thread Loop néien).