Paano Gumawa ng Mga Proseso ng Bata sa Node.js

Paano Gumawa Ng Mga Proseso Ng Bata Sa Node Js



Habang nagprograma sa ' node.js ”, ang isang proseso ay hindi kailanman mahusay para makayanan ang pagtaas ng workload ng aplikasyon. Samakatuwid, maaaring may ilang partikular na sitwasyon kung saan kailangan ng developer na gumawa ng mga bagong proseso, magtrabaho kasama ang mga pangmatagalang gawain, at paganahin ang pakikipag-ugnayan sa operating system. Ito ay maaaring makamit sa pamamagitan ng paglikha ng mga proseso ng bata upang magamit ang maraming mga proseso, at sa gayon ay na-scale ang isang Node application.

Ipinapaliwanag ng write-up na ito ang nilalamang nakalista sa ibaba:







Ano ang Proseso ng Bata?

Ang isang proseso ng bata ay tumutugma sa isang proseso na ginawa sa pamamagitan ng isa pang proseso i.e., magulang. Ang Node.js ay nagbibigay ng “ bata_proseso ” module na nagsisiguro ng epektibong komunikasyon sa pagitan ng mga proseso ng bata. Gayundin, ang module na ito ay tumutulong sa paggamit ng mga feature ng operating system sa pamamagitan ng pagsasagawa ng anumang utos ng system sa loob ng proseso ng bata.



Paano Gumawa ng Mga Proseso ng Bata sa Node.js?

Ang bata ay nagpoproseso sa ' node.js ” ay maaaring malikha sa pamamagitan ng mga nakasaad sa ibaba na mga diskarte:



  • spawn() ” Pamamaraan.
  • tinidor() ” Pamamaraan.
  • exec() ” Pamamaraan.
  • execFile() ” Pamamaraan.

Diskarte 1: Paglikha ng Mga Proseso ng Bata sa node.js Sa pamamagitan ng Paraang “spawn()”.

Ang ' spawn() ” paraan ay bumubuo ng isang cmdlet sa isang bagong proseso gamit ang ibinigay na cmdlet at ang mga argumento ng command line. Ang ChildProcess instance ay inilalapat/ipinatupad ang EventEmitter API na nagbibigay-daan upang irehistro ang mga humahawak para sa mga kaganapan sa mga child object. Kasama sa mga kaganapang ito ang paglabas, pagdiskonekta, error, mensahe, at pagsasara.





Syntax

bata_proseso. mangitlog ( cmdlet [ , args ] [ , mga pagpipilian ] )

Sa syntax na ito:



  • cmdlet: Ito ay nangangailangan ng isang string na kung saan ay ang cmdlet upang maipatupad.
  • args: Ito ay tumutukoy sa listahan ng mga argumento ng string. Ang default na halaga ay isang null array.
  • Ang ' mga pagpipilian Ang ” ay maaaring maging isang “shell” na kumukuha ng Boolean na halaga. Ito ay tulad na kung ito ay ' totoo ”, ang cmdlet ay isinasagawa mula sa loob ng shell. Ang default na halaga ay ' mali ” na nagpapahiwatig na walang shell. Bilang default, “ spawn() ” ay hindi gumagawa/bumubuo ng shell upang patakbuhin ang cmdlet samakatuwid, napakahalaga na ipasa ito bilang isang 'opsyon' habang ina-access ang proseso ng bata.

Halaga ng Pagbabalik: Kinukuha ng paraang ito ang isang bagay na ChildProcess.

Ang sumusunod ay ang pagpapakita ng paglikha ng proseso ng bata:

const { mangitlog } = nangangailangan ( 'child_process' ) ;

const anak = mangitlog ( 'ikaw' , [ 'D: \S ETUPS' ] , { kabibi : totoo } ) ;

bata. stdout . sa ( 'data' , ( datos ) => {

console. log ( `stdout : $ { datos } ` ) ;

} ) ;

bata. stderr . sa ( 'data' , ( datos ) => {

console. pagkakamali ( `stderr : $ { datos } ` ) ;

} ) ;

bata. sa ( 'malapit' , ( code ) => {

console. log ( Ang proseso ng bata ay lumabas na may code na $ { code } ` ) ;

} ) ;

Sa bloke ng code na ito:

  • Una sa lahat, isama ang ' bata_proseso ” module para sa paglikha ng proseso ng bata.
  • Pagkatapos nito, mag-spawn ng proseso ng bata para sa pagpapakita ng mga nilalaman sa tinukoy na landas i.e., ' D:\SETUPS ”.
  • Panghuli, ang ' malapit na ” na kaganapan ay na-invoke kapag ang buong proseso ng bata ay lumabas at ang exit na mensahe ay ipinapakita sa console.

Output

Dito, isagawa ang sumusunod na cmdlet upang patakbuhin ang code at ipakita ang mga nilalaman sa target na landas:

temp ng node. js

Diskarte 2: Paglikha ng Mga Proseso ng Bata sa node.js Gamit ang Paraang “fork()”.

Ang pamamaraang ito ay nauugnay sa ' spawn() 'paraan kung saan ang komunikasyon sa pagitan ng mga proseso ng bata at magulang ay maaaring isagawa sa pamamagitan ng ' ipadala() ” paraan.

Ang ' tinidor() Ang paraan ng ” ay naghihiwalay sa mga kumplikadong gawain sa pagkalkula mula sa loop ng kaganapan (pangunahing). Maaaring gamitin ang paraang ito upang ma-access ang maraming proseso ng bata ngunit maaari itong makaapekto sa pangkalahatang pagganap dahil ang bawat proseso ay may sariling memorya.

Syntax

bata_proseso. tinidor ( mdpath [ , args ] [ , mga pagpipilian ] )

Ayon sa syntax na ito:

  • mdpath ” kumukuha ng string na kumakatawan sa module na ipapatupad sa bata.
  • args ” ay tumutukoy sa isang listahan ng mga argumentong string.
  • mga pagpipilian ” ay maaaring “execPath”, “env”, “CWD”, “detached” at “execArgv”.

Halaga ng Pagbabalik: Kinukuha ng paraang ito ang isang halimbawa ng ChildProcess.

Code(Proseso ng Magulang)

Ngayon, dumaan sa ibinigay na bloke ng code sa ibaba na nagbibigay-daan sa komunikasyon sa pagitan ng mga proseso ng magulang at anak sa tulong ng ' ipadala() 'paraan:

const cp = nangangailangan ( 'child_process' ) ;

hayaan mo anak = cp. tinidor ( __dirname + '/fork2.js' ) ;

bata. sa ( 'mensahe' , function ( x ) {

console. log ( 'Nakuha ang proseso ng magulang:' , x ) ;

} ) ;

bata. ipadala ( { Kamusta : 'mula sa proseso ng magulang' } ) ;

bata. sa ( 'malapit' , ( code ) => {

console. log ( Ang proseso ng bata ay lumabas na may code na $ { code } ` ) ;

} ) ;

Sa code na ito:

  • Gayundin, isama ang ' bata_proseso ” module para sa paglikha ng proseso ng bata.
  • Ngayon, tukuyin ang landas ng proseso ng bata sa pamamagitan ng “ tinidor() ” paraan.
  • Panghuli, ipakita ang mensaheng kumakatawan sa proseso ng magulang sa pamamagitan ng ' ipadala() ” na paraan at ipakita ang (mga) nahaharap na error kung mayroon man.

Code(Proseso ng Bata)

Ang sumusunod na code file i.e., ' tinidor2.js Ang ” ay kumakatawan sa proseso ng bata na nagpapadala rin ng mensahe gamit ang “ ipadala() 'paraan, tulad ng sumusunod:

proseso. sa ( 'mensahe' , function ( m ) {

console. log ( 'Nakuha ang proseso ng bata:' , m ) ;

} ) ;

proseso. ipadala ( { Kamusta : 'mula sa proseso ng bata' } ) ;

Output

Ngayon, patakbuhin ang ibinigay na cmdlet sa ibaba upang maisagawa ang code:

node forkchild. js

Mula sa output na ito, nakumpirma na ang proseso ng komunikasyon ng magulang-anak ay isinasagawa nang naaangkop.

Diskarte 3: Paglikha ng Mga Proseso ng Bata sa node.js Gamit ang Paraang 'exec()'.

Ang ' exec() ” paraan ay unang lumilikha ng isang shell at pagkatapos ay nagpapatakbo ng cmdlet. Ang pamamaraang ito ay gagamitin upang makuha ang kabuuang mga direktoryo.

Syntax

bata_proseso. exec ( cmdlet [ , mga pagpipilian ] [ , callback ] )

Sa ibinigay na syntax:

  • cmdlet ” ay kumukuha ng string na kumakatawan sa utos na isagawa gamit ang mga argumentong pinaghihiwalay ng espasyo.
  • Ang ' mga pagpipilian ” isama ang “cwd”, “encoding”, “shell” atbp.
  • Ang ' callback Ang function na ” ay ginagamit kapag natapos ang proseso/operasyon.

Ibalik ang Halaga

Kinukuha ng paraang ito ang isang halimbawa ng ChildProcess.

Ngayon, lumipat sa code na naglilista ng bilang ng mga direktoryo:

const { exec } = nangangailangan ( 'child_process' ) ;
exec ( 'dir | hanapin /c /v ''' , ( error, stdout, stderr ) => {
kung ( pagkakamali ) {
console. pagkakamali ( `exec error : $ { pagkakamali } ` ) ;
bumalik ;
}
console. log ( `stdout : Numero ng mga Direktoryo -> $ { stdout } ` ) ;
kung ( stderr != '' )
console. pagkakamali ( `stderr : $ { stderr } ` ) ;
} ) ;

Sa snippet ng code na ito, isama ang ' bata_proseso ” module para gumawa/gumawa ng mga proseso ng bata. Pagkatapos nito, harapin ang mga nahaharap na mga pagbubukod/error at ipakita ang kabuuang bilang ng mga direktoryo sa kasalukuyang gumaganang direktoryo.

Output

Isagawa ang sumusunod na code upang patakbuhin ang code:

node execchild. js

Sa output na ito, maaari itong ipahiwatig na ang kabuuang mga direktoryo sa kasalukuyang gumaganang direktoryo ay ipinapakita.

Diskarte 4: Paglikha ng Mga Proseso ng Bata sa node.js Gamit ang ExecFile() Method

Nasa ' execFile() ” paraan, ang target na maipapatupad na file ay direktang nabuo sa anyo ng isang bagong proseso samakatuwid ito ay mas mahusay kaysa sa ' exec() ” paraan. Ang pamamaraang ito ay naglalabas ng nilikha na ' execchild.js ” file sa anyo ng isang bagong proseso.

Syntax

bata_proseso. execFile ( filename [ , args ] [ , mga pagpipilian ] [ , callback ] )

Sa ibinigay na syntax:

  • filename ” ay kumukuha ng string na kumakatawan sa pangalan o path ng file upang isakatuparan.
  • args ” ay tumutugma sa listahan ng mga argumentong string.
  • Ang ' mga pagpipilian ” isama ang “cwd”, “encoding”, “shell” atbp.
  • Ang ' callback Ang function na ” ay ginagamit kapag natapos ang proseso. Ang mga argumento ng function ay maaaring error, stdout, atbp.

Ibalik ang Halaga

Kinukuha din ng paraang ito ang isang halimbawa ng ChildProcess.

Ngayon, isaalang-alang ang sumusunod na code na naglalabas ng target na maipapatupad na file bilang isang bagong proseso:

const { execFile } = nangangailangan ( 'child_process' ) ;
const x = execFile ( 'node' , [ 'execchild.js' ] ,
( error, stdout, stderr ) => {
kung ( pagkakamali ) {
itapon pagkakamali ;
}
console. log ( stdout ) ;
} ) ;

Batay sa mga linya ng code na ito, ilapat ang mga sumusunod na hakbang:

  • Ulitin ang tinalakay na pamamaraan para sa pagsasama ng ' bata_proseso ” modyul.
  • Sa susunod na hakbang, ilapat ang ' execFile() ” paraan na nagpapalabas ng tinukoy na executable file (tinalakay sa nakaraang diskarte) bilang isang bagong proseso, at sa gayon ay naglilista ng kabuuang mga direktoryo sa gumaganang direktoryo.

Output

Isagawa ang cmdlet sa ibaba upang patakbuhin ang code:

node execfile. js

Sa kinalabasan na ito, maaari itong ma-verify na ang tinukoy na executable file ay na-spawned at ang bilang ng mga direktoryo ay ipinapakita.

Konklusyon

Ang mga proseso ng bata sa Node.js ay maaaring gawin sa pamamagitan ng “ spawn() 'paraan, ang' tinidor() 'paraan, ang' exec() 'paraan, o ang' execFile() ” paraan. Ang mga pamamaraang ito ay nagbubunga ng proseso ng bata, pinapagana ang komunikasyon ng proseso ng magulang-anak, o ilista ang mga direktoryo sa kasalukuyang gumaganang direktoryo (direkta o sa pamamagitan ng pag-spawning ng target na executable na file), ayon sa pagkakabanggit.