Hvordan lage underordnede prosesser i Node.js

Hvordan Lage Underordnede Prosesser I Node Js



Mens du programmerer i ' node.js ”, en enkelt prosess er aldri effektiv for å takle den økende arbeidsmengden til applikasjonen. Derfor kan det være visse situasjoner der utvikleren trenger å lage nye prosesser, jobbe med langsiktige oppgaver og muliggjøre interaksjon med operativsystemet. Dette kan oppnås ved å opprette underordnede prosesser for å gjøre bruk av flere prosesser, og dermed skalere en Node-applikasjon.

Denne artikkelen forklarer innholdet nedenfor:







Hva er en barneprosess?

En underordnet prosess tilsvarer en prosess opprettet via en annen prosess, dvs. overordnet. Node.js gir ' barneprosess ” modul som sikrer effektiv kommunikasjon mellom barneprosessene. Denne modulen hjelper også med å påkalle operativsystemfunksjonene ved å utføre en systemkommando i en underordnet prosess.



Hvordan lage underordnede prosesser i Node.js?

Barnet bearbeider i ' node.js ' kan opprettes via de nedenfor angitte tilnærmingene:



  • ' spawn() ' Metode.
  • ' gaffel() ' Metode.
  • ' exec() ' Metode.
  • ' execFile() ' Metode.

Tilnærming 1: Opprette underordnede prosesser i node.js Via 'spawn()'-metoden

« spawn() ”-metoden genererer en cmdlet i en ny prosess ved å bruke den medfølgende cmdleten og kommandolinjeargumentene. ChildProcess-forekomsten bruker/implementerer EventEmitter API som gjør det mulig å registrere behandlere for hendelser på underordnede objekter. Disse hendelsene inkluderer avslutning, frakobling, feilmelding, melding og lukking.





Syntaks

barneprosess. gyte ( cmdlet [ , args ] [ , alternativer ] )

I denne syntaksen:



  • cmdlet: Det krever en streng som er cmdlet for å utføre.
  • args: Det refererer til listen over strengargumenter. Standardverdien er en null-matrise.
  • « alternativer ' kan være et 'skall' som tar en boolsk verdi. Det er slik at hvis det er ' ekte ”, kjøres cmdleten fra skallet. Standardverdien er ' falsk ” som innebærer ingen skall. Som standard, ' spawn() ' oppretter/genererer ikke et skall for å kjøre cmdleten, derfor er det avgjørende å sende det som et 'alternativ' mens du får tilgang til den underordnede prosessen.

Returverdi: Denne metoden henter et ChildProcess-objekt.

Følgende er demonstrasjonen av å lage en barneprosess:

konst { gyte } = krever ( 'barneprosess' ) ;

konst barn = gyte ( 'du' , [ 'D: \S ETUPS' ] , { skall : ekte } ) ;

barn. standout . ( 'data' , ( data ) => {

konsoll. Logg ( `stdout : $ { data } ` ) ;

} ) ;

barn. stderr . ( 'data' , ( data ) => {

konsoll. feil ( `stderr : $ { data } ` ) ;

} ) ;

barn. ( 'Lukk' , ( kode ) => {

konsoll. Logg ( `Underordnet prosess avsluttet med kode $ { kode } ` ) ;

} ) ;

I denne kodeblokken:

  • Først av alt, inkluderer ' barneprosess ”-modul for å lage en underordnet prosess.
  • Etter det, skap en underordnet prosess for å vise innholdet i den angitte banen, dvs. ' D:\SETUPS '.
  • Til slutt, ' Lukk ”-hendelsen påkalles når hele den underordnede prosessen avsluttes og avslutningsmeldingen vises på konsollen.

Produksjon

Her, utfør følgende cmdlet for å kjøre koden og vise innholdet i målbanen:

node temp. js

Tilnærming 2: Opprette underordnede prosesser i node.js ved å bruke 'fork()'-metoden

Denne metoden er assosiert med ' spawn() ” metode hvor kommunikasjonen mellom barnet og foreldreprosessene kan utføres via ” sende() 'metoden.

« gaffel() ”-metoden skiller de komplekse beregningsoppgavene fra hendelsesløkken(main). Denne metoden kan brukes til å få tilgang til flere underordnede prosesser, men den kan påvirke den generelle ytelsen ettersom hver prosess har sitt eget minne.

Syntaks

barneprosess. gaffel ( mdpath [ , args ] [ , alternativer ] )

I følge denne syntaksen:

  • ' mdpath ” tar en streng som representerer modulen som skal utføres i barnet.
  • ' args ' refererer til en liste over strengargumenter.
  • ' alternativer ' kan være 'execPath', 'env', 'CWD', 'detached' og 'execArgv'.

Returverdi: Denne metoden henter en ChildProcess-forekomst.

Kode (overordnet prosess)

Gå nå gjennom den nedenfor gitte kodeblokken som muliggjør kommunikasjon mellom foreldre- og barneprosessene ved hjelp av ' sende() ' metode:

konst cp = krever ( 'barneprosess' ) ;

la barnet = cp. gaffel ( __dirnavn + '/fork2.js' ) ;

barn. ( 'beskjed' , funksjon ( x ) {

konsoll. Logg ( 'Overordnet prosess fikk:' , x ) ;

} ) ;

barn. sende ( { Hallo : 'fra overordnet prosess' } ) ;

barn. ( 'Lukk' , ( kode ) => {

konsoll. Logg ( `Underordnet prosess avsluttet med kode $ { kode } ` ) ;

} ) ;

I denne koden:

  • På samme måte kan du inkludere ' barneprosess ”-modul for å lage en underordnet prosess.
  • Spesifiser nå banen til den underordnede prosessen via ' gaffel() 'metoden.
  • Til slutt, vis meldingen som representerer den overordnede prosessen via ' sende() ”-metoden og vis feilen/feilene hvis noen.

Kode (underordnet prosess)

Følgende kodefil, dvs. ' fork2.js ' representerer den underordnede prosessen som også sender meldingen ved å bruke ' sende() '-metoden, som følger:

prosess. ( 'beskjed' , funksjon ( m ) {

konsoll. Logg ( 'Barneprosessen fikk:' , m ) ;

} ) ;

prosess. sende ( { Hallo : 'fra barneprosess' } ) ;

Produksjon

Kjør nå cmdleten nedenfor for å utføre koden:

node gaffelbarn. js

Fra denne utgangen bekreftes det at foreldre-barn-prosesskommunikasjonen er utført på riktig måte.

Tilnærming 3: Opprette underordnede prosesser i node.js ved å bruke 'exec()'-metoden

« exec() ”-metoden oppretter først et skall og kjører deretter cmdleten. Denne metoden vil bli brukt for å hente de totale katalogene.

Syntaks

barneprosess. exec ( cmdlet [ , alternativer ] [ , Ring tilbake ] )

I den gitte syntaksen:

  • ' cmdlet ” tar en streng som representerer kommandoen som skal utføres med mellomromseparerte argumenter.
  • « alternativer ' inkluderer 'cwd', 'encoding', 'shell' osv.
  • « Ring tilbake ”-funksjonen påkalles når prosessen/operasjonen avsluttes.

Returverdi

Denne metoden henter en ChildProcess-forekomst.

Gå nå videre til koden som viser antall kataloger:

konst { exec } = krever ( 'barneprosess' ) ;
exec ( 'dir | finn /c /v ''' , ( feil, stdout, stderr ) => {
hvis ( feil ) {
konsoll. feil ( `exec-feil : $ { feil } ` ) ;
komme tilbake ;
}
konsoll. Logg ( `stdout : Antall av kataloger -> $ { standout } ` ) ;
hvis ( stderr != '' )
konsoll. feil ( `stderr : $ { stderr } ` ) ;
} ) ;

I denne kodebiten inkluderer du ' barneprosess ” modul for å lage/lage underordnede prosesser. Deretter takler du unntakene/feilene og viser det totale antallet kataloger i gjeldende arbeidskatalog.

Produksjon

Kjør følgende kode for å kjøre koden:

node execchild. js

I denne utgangen kan det antydes at de totale katalogene i gjeldende arbeidskatalog vises.

Tilnærming 4: Opprette underordnede prosesser i node.js ved å bruke execFile()-metoden

I « execFile() '-metoden, blir den kjørbare målfilen opprettet direkte i form av en ny prosess, derfor er den mer effektiv enn ' exec() 'metoden. Denne metoden skaper den opprettede ' execchild.js ”-fil i form av en ny prosess.

Syntaks

barneprosess. execFile ( filnavn [ , args ] [ , alternativer ] [ , Ring tilbake ] )

I den gitte syntaksen:

  • ' filnavn ” tar en streng som representerer filens navn eller bane for å kjøre.
  • ' args ” tilsvarer listen over strengargumenter.
  • « alternativer ' inkluderer 'cwd', 'encoding', 'shell' osv.
  • « Ring tilbake ”-funksjonen påkalles når prosessen avsluttes. Funksjonsargumentene kan være feil, stdout osv.

Returverdi

Denne metoden henter også en ChildProcess-forekomst.

Tenk nå på følgende kode som skaper den kjørbare målfilen som en ny prosess:

konst { execFile } = krever ( 'barneprosess' ) ;
konst x = execFile ( 'node' , [ 'execchild.js' ] ,
( feil, stdout, stderr ) => {
hvis ( feil ) {
kaste feil ;
}
konsoll. Logg ( standout ) ;
} ) ;

Basert på disse kodelinjene, bruk følgende trinn:

  • Gjenta den diskuterte prosedyren for å inkludere ' barneprosess ' modul.
  • I neste trinn bruker du ' execFile() ”-metoden som skaper den spesifiserte kjørbare filen (diskutert i forrige tilnærming) som en ny prosess, og dermed viser de totale katalogene i arbeidskatalogen.

Produksjon

Kjør cmdleten nedenfor for å kjøre koden:

node execfile. js

I dette resultatet kan det verifiseres at den angitte kjørbare filen er opprettet og antall kataloger vises.

Konklusjon

Underordnede prosesser i Node.js kan opprettes via ' spawn() 'metoden, ' gaffel() 'metoden, ' exec() '-metoden, eller ' execFile() 'metoden. Disse tilnærmingene skaper underordnet prosessen, aktiverer kommunikasjon mellom foreldre og underordnede prosesser, eller lister opp katalogene i gjeldende arbeidskatalog (direkte eller via gyting av den kjørbare målfilen).