NodeJS子进程:exec, fork, spawn

Node的优势在于其语言的处理速度,而它的速度建立在异步处理和事件驱动的机制上。但语言本身的单线程处理会让速度受限,并且在硬件资源充沛的环境下无法充分利用计算机的性能。举个列子:服务器的业务逻辑中如果某模块的复杂度特别高需要花大量的时间做处理,在只有一个线程的情况下,代码处理会被阻塞。Node开发团队因此也推出了解决方案,那就是child_process模块,其模块提供了四个函数:exec, execFile, spawn, fork。这四个函数的核心功能都是衍生子进程,区别在于它们之间不同的调用形式和通信方式。

Spawn是最基础的函数,其他三个API功能都是基于spawn命令实现的。该函数接受三个参数,第一个是执行命令(e.g. node, ls, chmod)。第二个参数是一个数组,数组内可包括所有拼接在执行命令后面的参数。第三个参数是一个option对象。因为child_process继承了Event模块,所以可以在父进程对子进程做监听。通过stdout能获取到进程的所有输出。

var spawn = require('child_process').spawn;
// Create a child process
var child = spawn('tail', 
    ['-f', '/var/log/system.log']);

child.stdout.on('data', function(data){
    console.log(data);
})

Fork 的调用方式和spawn非常相似,差别在于fork的父进程可以和子进程通信。在子进程的对象内调用send函数即可实现,而子进程只需通过proccess函数监听message事件即可获得信息。

exec的调用方式也是类似,但区别在于exec的进程是在shell生成并使用的。

你可能感兴趣的:(NodeJS子进程:exec, fork, spawn)