Kuidas luua Node.js-is alamprotsesse

Kuidas Luua Node Js Is Alamprotsesse



Programmeerimise ajal ' node.js ”, üks protsess ei ole kunagi tõhus rakenduse kasvava töökoormusega toimetulemiseks. Seetõttu võib ette tulla teatud olukordi, kus arendajal on vaja luua uusi protsesse, töötada pikaajaliste ülesannetega ja võimaldada interaktsiooni operatsioonisüsteemiga. Seda saab saavutada alamprotsesside loomisega, mis kasutavad mitut protsessi, suurendades seeläbi sõlmerakendust.

See kirjutis selgitab allpool loetletud sisu:







Mis on lapseprotsess?

Alamprotsess vastab protsessile, mis on loodud teise protsessi, st vanemprotsessi kaudu. Node.js pakub laps_protsess ” moodul, mis tagab tõhusa suhtluse lapse protsesside vahel. Samuti aitab see moodul käivitada operatsioonisüsteemi funktsioone, täites mis tahes süsteemikäsku alamprotsessis.



Kuidas luua Node.js-is alamprotsesse?

Laps töötleb ' node.js ” saab luua alltoodud lähenemisviiside abil:



  • spawn () ” Meetod.
  • kahvel () ” Meetod.
  • exec() ” Meetod.
  • execFile() ” Meetod.

1. lähenemisviis: Lapsprotsesside loomine failis node.js 'spawn()' meetodi abil

' spawn () ” meetod genereerib uues protsessis cmdleti, kasutades pakutud cmdleti ja käsurea argumente. ChildProcessi eksemplar rakendab/rakestab EventEmitter API-d, mis võimaldab registreerida alamobjektide sündmuste käitlejaid. Nende sündmuste hulka kuuluvad väljumine, ühenduse katkestamine, tõrge, teade ja sulgemine.





Süntaks

laps_protsess. kudema ( cmdlet [ , args ] [ , valikud ] )

Selles süntaksis:



  • cmdlet: Käivitamiseks on vaja stringi, mis on cmdlet.
  • args: See viitab stringi argumentide loendile. Vaikeväärtus on nullmassiiv.
  • ' valikuid ” võib olla „kest”, mis võtab Boole'i ​​väärtuse. See on nii, et kui see on ' tõsi ”, käivitatakse cmdlet kestast. Vaikeväärtus on ' vale ”, mis ei tähenda kesta olemasolu. Algselt, ' spawn () ” ei loo/genereeri kesta cmdleti käitamiseks, seetõttu on alamprotsessile juurdepääsu ajal ülioluline edastada see valikuna.

Tagastusväärtus: See meetod toob alla ChildProcessi objekti.

Järgmine on lapseprotsessi loomise demonstratsioon:

konst { kudema } = nõuda ( 'lapse_protsess' ) ;

konst laps = kudema ( 'sina' , [ 'D: \S ETUPS ] , { kest : tõsi } ) ;

laps. stdout . peal ( 'andmed' , ( andmeid ) => {

konsool. logi ( `stdout : $ { andmeid } ` ) ;

} ) ;

laps. stderr . peal ( 'andmed' , ( andmeid ) => {

konsool. viga ( `stderr : $ { andmeid } ` ) ;

} ) ;

laps. peal ( 'Sulge' , ( kood ) => {

konsool. logi ( `alamprotsess väljus koodiga $ { kood } ` ) ;

} ) ;

Selles koodiplokis:

  • Kõigepealt lisage ' laps_protsess ” moodul alamprotsessi loomiseks.
  • Pärast seda looge alamprotsess sisu kuvamiseks määratud teel, st ' D:\SETUPS ”.
  • Lõpuks, ' Sulge ” sündmus kutsutakse esile, kui kogu alamprotsessist väljutakse ja konsoolil kuvatakse väljumisteade.

Väljund

Siin käivitage koodi käivitamiseks ja sihttee sisu kuvamiseks järgmine cmdlet:

sõlme temp. js

2. lähenemisviis: Lapsprotsesside loomine failis node.js, kasutades meetodit “fork()”.

See meetod on seotud ' spawn () meetod, kus lapse ja vanema vahelist suhtlust saab läbi viia saada() ” meetod.

' kahvel () ” meetod eraldab keerulised arvutusülesanded sündmusetsüklist (main). Seda meetodit saab kasutada juurdepääsuks mitmele alamprotsessile, kuid see võib mõjutada üldist jõudlust, kuna igal protsessil on oma mälu.

Süntaks

laps_protsess. kahvel ( mdpath [ , args ] [ , valikud ] )

Selle süntaksi järgi:

  • mdpath ” võtab stringi, mis tähistab lapses käivitatavat moodulit.
  • args ” viitab stringi argumentide loendile.
  • valikuid ' võib olla 'execPath', 'env', 'CWD', 'detached' ja 'execArgv'.

Tagastusväärtus: See meetod hangib ChildProcessi eksemplari.

Kood (vanemaprotsess)

Nüüd minge läbi alltoodud koodiplokk, mis võimaldab suhelda vanema ja lapse protsesside vahel, kasutades ' saada() ” meetod:

konst cp = nõuda ( 'lapse_protsess' ) ;

las laps = cp. kahvel ( __direktornimi + '/fork2.js' ) ;

laps. peal ( 'sõnum' , funktsioon ( x ) {

konsool. logi ( 'Vanemprotsess sai:' , x ) ;

} ) ;

laps. saada ( { Tere : 'vanemaprotsessist' } ) ;

laps. peal ( 'Sulge' , ( kood ) => {

konsool. logi ( `alamprotsess väljus koodiga $ { kood } ` ) ;

} ) ;

Selles koodis:

  • Samuti lisage ' laps_protsess ” moodul alamprotsessi loomiseks.
  • Nüüd määrake alamprotsessi tee käsuga ' kahvel () ” meetod.
  • Lõpuks kuvage sõnum, mis esindab vanemprotsessi, kasutades ' saada() ” meetodit ja kuvage ilmnenud viga(d), kui neid on.

Kood (alaprotsess)

Järgmine koodifail, st ' fork2.js ' tähistab alamprotsessi, mis saadab ka sõnumi, kasutades ' saada() ” meetodil järgmiselt:

protsessi. peal ( 'sõnum' , funktsioon ( m ) {

konsool. logi ( 'Lapsprotsess sai:' , m ) ;

} ) ;

protsessi. saada ( { Tere : 'lapsprotsessist' } ) ;

Väljund

Nüüd käivitage koodi käivitamiseks alltoodud cmdlet:

node forkchild. js

Sellest väljundist selgub, et vanema ja lapse protsessi suhtlus toimub asjakohaselt.

3. lähenemisviis: Alamprotsesside loomine failis node.js, kasutades meetodit “exec()”.

' exec() ” meetod loob esmalt kesta ja käivitab seejärel cmdleti. Seda meetodit kasutatakse kogu kataloogide toomiseks.

Süntaks

laps_protsess. täitja ( cmdlet [ , valikud ] [ , helista tagasi ] )

Antud süntaksis:

  • cmdlet ” võtab stringi, mis tähistab tühikuga eraldatud argumentidega käivitatavat käsku.
  • ' valikuid ' sisaldab 'cwd', 'kodeering', 'shell' jne.
  • ' helista tagasi ” funktsioon käivitatakse protsessi/toimingu lõppedes.

Tagastusväärtus

See meetod hangib ChildProcessi eksemplari.

Nüüd liikuge edasi koodi juurde, mis loetleb kataloogide arvu:

konst { täitja } = nõuda ( 'lapse_protsess' ) ;
täitja ( 'direktor | leia /c /v ''' , ( viga, stdout, stderr ) => {
kui ( viga ) {
konsool. viga ( `täitmisviga : $ { viga } ` ) ;
tagasi ;
}
konsool. logi ( `stdout : Number kataloogidest -> $ { stdout } ` ) ;
kui ( stderr != '' )
konsool. viga ( `stderr : $ { stderr } ` ) ;
} ) ;

Kaasake sellesse koodilõigu ' laps_protsess ” moodul alamprotsesside loomiseks/tegemiseks. Pärast seda tuleb toime ilmnenud erandite/vigadega ja kuvada kataloogide koguarv praeguses töökataloogis.

Väljund

Koodi käivitamiseks käivitage järgmine kood:

node execchild. js

Selles väljundis võib järeldada, et kuvatakse praeguse töökataloogi kataloogide koguarv.

4. lähenemisviis: Alamprotsesside loomine failis node.js, kasutades meetodit execFile().

jaotises ' execFile() ” meetodil luuakse sihtkäivitav fail otse uue protsessi kujul, seega on see tõhusam kui „ exec() ” meetod. See meetod loob loodud ' execchild.js ” faili uue protsessi kujul.

Süntaks

laps_protsess. execFile ( faili nimi [ , args ] [ , valikud ] [ , helista tagasi ] )

Antud süntaksis:

  • faili nimi ” võtab stringi, mis tähistab faili nime või käivitamise teed.
  • args ” vastab stringi argumentide loendile.
  • ' valikuid ' sisaldab 'cwd', 'kodeering', 'shell' jne.
  • ' helista tagasi ” funktsioon käivitatakse protsessi lõppedes. Funktsiooni argumendid võivad olla error, stdout jne.

Tagastusväärtus

See meetod hangib ka ChildProcessi eksemplari.

Nüüd kaaluge järgmist koodi, mis loob sihtkäivitusfaili uue protsessina:

konst { execFile } = nõuda ( 'lapse_protsess' ) ;
konst x = execFile ( 'sõlm' , [ 'execchild.js' ] ,
( viga, stdout, stderr ) => {
kui ( viga ) {
viskama viga ;
}
konsool. logi ( stdout ) ;
} ) ;

Nende koodiridade põhjal rakendage järgmisi samme.

  • Korrake arutatud protseduuri, et lisada ' laps_protsess ” moodul.
  • Järgmises etapis rakendage ' execFile() ” meetod, mis loob määratud käivitatava faili (seda käsitleti eelmises lähenemisviisis) uue protsessina, loetledes sellega töökataloogi kataloogid kokku.

Väljund

Koodi käivitamiseks käivitage allolev cmdlet:

sõlme täitefail. js

Selle tulemusega saab kontrollida, kas määratud käivitatav fail on loodud ja kuvatakse kataloogide arv.

Järeldus

Node.js-i alamprotsesse saab luua ' spawn () ' meetod, ' kahvel () ' meetod, ' exec() ' meetod või ' execFile() ” meetod. Need lähenemisviisid loovad alamprotsessi, võimaldavad vanem-lapse protsessi suhtlust või loetlevad kataloogid praeguses töökataloogis (otse või sihtkäivitusfaili loomise kaudu).