Cili është ndryshimi midis arkitekturës së drejtuar nga ngjarja e Node.js dhe programimit multithread në gjuhë të tjera?


përgjigje 1:

Në të dyja paradigmat e drejtuara nga ngjarja dhe multithreaded, kodi ekzekutohet brenda një procesi të sistemit operativ.

Nëse procesi funksionon me fije të shumta, këto fije ndajnë memorjen e procesit (hapësirën e adresave) për lexim dhe shkrim.

JavaScript, e cila drejton Node.js, është në vetvete me një fije. Functiondo funksion është i garantuar të ekzekutohet plotësisht dhe asnjë kod tjetër JavaScript nuk ekzekutohet në procesin aktual gjatë ekzekutimit të këtij funksioni. Ngjarjet natyrisht asinkrone (rrjeti, hyrja / dalja nga disku, kohëmatësi, ngjarjet e tjera të harduerit dhe sistemit operativ) përpunohen nga motori, i cili shton funksionet JavaScript të regjistruara si mbajtës (ose kthyes të thirrjeve) për këto ngjarje në radhën e lakut të ngjarjeve që duhen ekzekutuar. para se të mbarojë radha.

Në paradigmën e shumë-lexuar, dy ose më shumë fije ekzekutojnë kodin paralelisht, në mënyrë që gjatë një funksionimi funksionues, një pjesë tjetër e kodit gjithashtu mund të ekzekutohet në një thelb të procesorit të ndryshëm, mundësisht të lexoni ose shkruani në të njëjtat adresa të memorjes. Kjo mund të çojë në një gjendje të paqëndrueshme të kujtesës, përveç nëse kodi përdor mekanizma të veçantë të sistemit operativ (primitivët e sinkronizimit) për të menaxhuar qasjen në memorjen e përbashkët.



përgjigje 2:

Kjo është një pyetje e mirë: "Cili është ndryshimi midis arkitekturës së drejtuar nga ngjarja e Node.j dhe programimit multithread në gjuhë të tjera?"

Ne mund dhe duhet ta ulim këtë pak.

  • Arkitektura e nyjës e drejtuar nga ngjarja

Arkitektura e drejtuar nga ngjarja nuk ka për qëllim ekskluzivisht për nyjet, p.sh. B. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (gjuhë të shumta).

  • Programim multithread në gjuhë të tjera.

Vini re se JavaScript nuk mbështet fije të shumta si parazgjedhje. Ai i mbështet punëtorët e uebit, të cilët, për dijen time, mund të veprojnë si tema.

Nisur nga ngjarja nuk është në dispozicion vetëm për nyjet, dhe multithreading mund të kryhet në nyje.

Pra, mund të ekzistojnë dy pyetje: "Cili është ndryshimi midis ngjarjeve të drejtuara nga ngjarja dhe multithreading" dhe "Cili është ndryshimi midis nyjes dhe gjuhëve të tjera (kornizat)". Do të përqendrohem tek kjo e fundit pasi kjo duket se është qëllimi i pyetjes.

Gjëja e veçantë për Node është që autori e krijoi atë për të shmangur bllokimin e I / O kur ndërton aplikacione në internet. Kultura e bashkësisë së nyjeve është të theksohet dhe të ndërtohet në forcën e I / O jo-bllokuese. Ju nuk do të gjeni shumë biblioteka të palëve të treta që bllokojnë thirrjet. Si një zhvillues duke përdorur Node, nuk ka gjasa të hasni bllokime delikate në kodin tuaj. Në gjuhë të tjera, një zhvillues naiv mund të bëjë aksidentalisht thirrje bllokimi shumë joefikase, si psh B. Leximi nga një lidhje me bazën e të dhënave.

E thënë kjo, duhet të lexoni më shumë për modele të shumta "paralelizmi" dhe të kuptoni të mirat dhe të këqijat e secilit. Pika bonus për të njohur pse multithreading ka qenë e pranueshme për kaq gjatë.



përgjigje 3:

Dallimet konceptuale janë goxha të thjeshta për tu mbështjellur kokën.

Në arkitekturën e drejtuar nga ngjarja, programi juaj shkon në një lak të vazhdueshëm me një fije të vetme (ju mund të bëni disa nyje me shumë nyje, por nuk keni nevojë të shqetësoheni për këtë moment). Kur nxitet një ngjarje, ekziston një punë në pirgun e thirrjeve që do të përpunohet në kohën e lirë të programit.

Arkitektura e shumëpërfolur zakonisht shkakton një fill të ri kur duhet të presë për një veprim. Kështu që ju shkoni në një bazë të dhënash dhe krijoni një fije të re që bën të gjitha detyrat e nevojshme dhe ndërmerr hapat e nevojshëm për të kompletuar ose ribashkuar fijen origjinale.

Të dyja metodat janë shumë të dobishme për qëllime të ndryshme. Ngjarja e drejtuar është e shkëlqyeshme për ndërfaqet e përdoruesve dhe serverat sepse programi juaj nuk e di kur ndodh një ngjarje e re dhe ngjarjet shpesh ndodhin në spurts. Ndërsa fillimi i filetimit kërkohet për punë me intensitet llogaritës, ku dëshironi të ndani një problem në pjesë shumë më të vogla (ose afrohuni kufirin e lakut tuaj të vetëm).