眾所周知node.js是基於單線程模型架構,這樣的設計可以帶來高效的CPU利用率,但是無法卻利用多個核心的CPU,為了解決這個問題,node.js提供了child_process模塊,通過多進程來實現對多核CPU的利用. child_process模塊提供了四個創建子進程的函數,分別是spawn,exec,execFile和fork。
1.spawn函數的簡單用法
spawn函數用給定的命令發布一個子進程,只能運行指定的程序,參數需要在列表中給出。如下示例:
- var child_process = require('child_process');
- var child = child_process.spawn( command );
- child.stdout.on('data', function(data) {
- console.log(data);
- });
通過執行命令得到返回結果,我們就可以拿到標准輸出流數據了。
2.exec函數的簡單用法
exec也是一個創建子進程的函數,與spawn函數不同它可以直接接受一個回調函數作為參數,回調函數有三個參數,分別是err, stdout , stderr,基本使用方法如下:
- var child_process = require('child_process');
- child_process.exec( command , function(err, stdout , stderr ) {
- console.log( stdout );
- });
exec函數可以直接接受一個回調函數作為參數,回調函數有三個參數,分別是err, stdout,stderr,非常方便直接使用,
3.execFile函數的簡單用法
execFile函數與exec函數類似,但execFile函數更顯得精簡,因為它可以直接執行所指定的文件,基本使用方法如下:
- var child_process = require('child_process');
- child_process.execFile( file , function(err, stdout , stderr ) {
- console.log( stdout );
- });
execFile與spawn的參數相似,也需要分別指定執行的命令和參數,但可以接受一個回調函數,與exec的回調函數相同。
4.fork函數的簡單用法
fork函數可直接運行Node.js模塊,所以我們可以直接通過指定模塊路徑而直接進行操作。使用方法如下:
- var child_process = require('child_process');
- child_process.fork( modulePath );
該方法是spawn()的特殊情景,用於派生Node進程。除了普通ChildProcess實例所具有的所有方法,所返回的對象還具有內建的通訊通道。
