node 多进程 vs java_node.js(九 --- 多进程)

node.js是以单线程的模式运行的,但是使用的是事件驱动来处理并发,这样有助于在多核cpu的系统上创建多个子进程,从而提高性能。

每个子进程总共带有三个流对象:child.stdin、child.stdout和child.stderr;他们可能会共享父进程的stdio流,或者也可以是独立的被导流的流对象。

node.js提供了child_process模块来创建子进程,方法有:exec、spawn、fork;

exec:

child_process.exec使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回;

用法:child_process.exec(command, options, callback);

command: 字符串,将要运行的命令,参数使用空格隔开;

options: 对象,可以是:

cwd,字符串,子进程的当前工作目录;

env,对象环境变量键值对;

encoding,字符串,字符编码(默认:'utf-8');

shell,字符串,将要执行命令的Shell;

timeout,数字,超时时间(默认:0);

maxBuffer,数字, 在stderr中允许存在的最大缓冲(二进制),如果超出那么子进程将会被杀死(默认:200*1024);

killSignal,字符串,结束信号(默认: 'SiGTERM');

uid, 数字,设置用户进程ID;

gid,数字,设置进程组的ID

callback: 回调函数,包含三个参数error,stdout和stderr.

spawn:

child_process.spawn使用指定的命令行参数创建新进程;

用法: child_process.spawn(command, args, options);

command: 将要运行的命令;

args: Array字符串参数数组;

options Object:

cwd Dtring,子进程的当前工作目录;

env Object,环境变量键值对;

stdio Array/String,子进程的stdio;

detached Boolean,这个子进程将会变成进程组的领导;

uid Number,设置用户进程的ID;

gid Number,设置进程组的ID;

spawn()方法返回流(stdout & stderr),在进程返回大量数据时使用。进程一旦开始执行时spawn()就开始接收响应。

fork:

child_process.fork是spawn()的特殊形式,用于在子进程中运行的模块,如fork('./son.js')相当于spawn('node', './son.js');与spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,用于进程之间的通信;

用法:child_process.fork(modulePath, args, options)

modulePath:String,将要在子进程中运行的模块;

args: Array字符串参数数组;

options: Object

cwd String子进程的当前工具目录;

env Object环境变量键值对;

execPath String,创建子进程的可执行文件;

execArgv Array,子进程的可执行文件的字符串参数数组(默认:process.exexArgv);

silent BOOlean,如果为true,子进程的stdin, stdout和stderr将会被关联至父进程,否则,它们将会从父进程中继承;(默认为:false);

uid NUmber,设置用户进程的ID;

gid Number, 设置进程组的ID;

返回的对象除了拥有ChildProcess实例的所有方法,还有一个内建的通信信道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值