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生成并使用的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值