Node.js中的childITeye - 超凡娱乐

Node.js中的childITeye

2019-01-13 13:10:50 | 作者: 运乾 | 标签: 进程,函数,一个 | 浏览: 552

child_process是Node.js的一个十分重要的模块,经过它能够完成创立多进程,以运用多核核算资源。

Node.js 0.8的child_process模块供给了四个创立子进程的函数,别离是spawn,exec,execFile和fork。其间spawn是最原始的创立子进程的函数,其他三个都是对spawn不同程度的封装。spawn只能运转指定的程序,参数需求在列表中给出,相当于execvp体系函数,而exec能够直接运转杂乱的指令。

例如要运转ls -lh /usr,运用spawn需求写成spawn(ls, [-lh, /usr]),而exec只需exec(ls -lh /usr)。exec的完成原理是发动了一个体系shell来解析参数,因而能够是十分杂乱的指令,包含管道和重定向。此外,exec还能够直接承受一个回调函数作为参数,回调函数有三个参数,别离是err, stdout, stderr,十分便利直接运用,例如:

child_process.exec(ls -lh /usr, function(err, stdout, stderr) {
 console.log(stdout);
});

假如运用spawn,则有必要写成:

child = child_process.spawn(ls, [-lh, /usr]);
child.stdout.setEncoding(utf8);
child.stdout.on(data, function(data) {
 console.log(data);
});

execFile与spawn的参数类似,也需求别离指定履行的指令和参数,但能够承受一个回调函数,与exec的回调函数相同。它与exec的差异在于不发动独立的shell,因而比较愈加轻量级。

fork函数用于直接运转Node.js模块,例如fork(./child.js),相当于spawn(node, [./child.js])。与默许的spawn不同的是,fork会在父进程与子进程直接树立一个IPC管道,用于父子进程之间的通讯。例如:

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

child.js的内容:

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

其间父进程调用fork函数获取一个回来值,作为子进程的句柄,经过send函数发送信息,on(message)监听回来的信息,子进程经过内置的process目标相同的方法与父进程通讯。

fork函数有一个问题,就是它只能运转JavaScript代码,假如你喜爱用CoffeeScript(或许其他任何编译到js的言语),是无法经过fork调用的。一个简略的方法是把代码编译到JavaScript再运转,可是很不便利,有没有什么方法呢?

答案是能够的,仍是得回到spawn函数。spawn函数除了承受command, args外,还承受一个options参数。经过把options参数的stdio设为[ipc],即可在父子进程之间树立IPC管道。例如子进程运用CoffeeScript:

child_process = require(child_process)
options =
 stdio: [ipc]
child = child_process.spawn coffee, [./child.coffee], options

其间只要把spawn的第一个参数设置为运转对应脚本的解说器,即可运转,例如运用Continuation.js,只需child = child_process.spawn(continuation, [./child.coffee], options)。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    PHP多态ITeye

    多态,目标,不同
  • 2
  • 3
  • 4

    调用体系程序(转)ITeye

    进程,咱们,程序
  • 5
  • 6

    puttyITeye

    保存,用户名,暗码
  • 7

    1001ITeye

    小数点,个数,位数
  • 8
  • 9
  • 10

    vim装备ITeye

    文件,设置,状况