nodejs的多进程管理模块child_process

  child_process是Node.js的一��十分重要的模�K,通�^它可以���F��建多�M程,以利用多核�算�Y源,同时方便管理各个子模块进程。

  Node.js 0.8的child_process模�K提供了四����建子�M程的函�担�分�e是spawn,exec,execFile和fork。其中spawn是最原始的��建子�M程的函�担�其他三��都是��spawn不同程度的封�b。spawn只能�\行指定的程序,��敌枰�在列表中�o出,相��於execvp系�y函�担�而exec可以直接�\行�}�s的命令。

看下面spawn与exec的差异:

  
  
  
  
  1. child = child_process.spawn('ls', ['-lh''/usr']); 
  2. child.stdout.setEncoding('utf8'); 
  3. child.stdout.on('data'function(data) { 
  4.   console.log(data); 
  5. }); 
  
  
  
  
  1. child_process.exec('ls -lh /usr'function(err, stdout, stderr) { 
  2.   console.log(stdout); 
  3. }); 

execFile�cspawn的��迪嗨疲�也需要分�e指定�绦械拿�令和��担�但可以接受一��回�{函�担��cexec的回�{函�迪嗤�。它�cexec的�^�e在於不���营�立的shell,因此相比更加�p量�。

fork函�涤渺吨苯舆\行Node.js模�K,例如fork(‘./child.js’),相��於spawn(‘node’, ['./child.js'])。�c默�J的spawn不同的是,fork��在父�M程�c子�M程直接建立一��IPC管道,用於父子�M程之�g的通信。例如:

  
  
  
  
  1. var n = child_process.fork('./child.js'); 
  2. n.on('message'function(m) { 
  3.   console.log('PARENT got message:', m); 
  4. }); 
  5. n.send({ hello: 'world' }); 

child.js的内容:

  
  
  
  
  1. process.on('message'function(m) { 
  2.   console.log('CHILD got message:', m); 
  3. }); 
  4. process.send({ foo: 'bar' }); 

 

其中父�M程�{用fork函�但@取一��返回值,作��子�M程的句柄,通�^send函�蛋l送信息,on(‘message’)�O�返回的信息,子�M程通�^�戎玫�process�ο笙嗤�的方法�c父�M程通信。

fork函�涤幸�����},就是它只能�\行JavaScript代�a,如果你喜�g用CoffeeScript(或者其他任何��g到js的�Z言),是�o法通�^fork�{用的。一����蔚姆椒ㄊ前汛��a��g到JavaScript再�\行,但是很不方便,有�]有什�N�k法呢?答案是可以的,�是得回到spawn函�怠�spawn函�党�了接受command, args外,�接受一��options��怠Mㄟ^把options��档�stdio�O��['ipc'],即可在父子�M程之�g建立IPC管道。例如子�M程使用CoffeeScript:

 

  
  
  
  
  1. child_process = require('child_process'
  2. options = 
  3.   stdio: ['ipc'
  4. child = child_process.spawn 'coffee', ['./child.coffee'], options 

其中只要把spawn的第一����翟O置���\行����_本的解�器,即可�\行,例如使用Continuation.js,只需child = child_process.spawn(‘continuation’, ['./child.coffee'], options)。

转载来源传送门

你可能感兴趣的:(node,child_process,子进程管理)