Node.js child_process进程

什么是进程

例如我们有一个Chrome.exe的一个程序,不是进程。双击Chrome.exe时,操作系统会开启一个进程。

  • 进程是程序的执行实例
  • 程序在CPU上执行时的活动叫做进程
  • 实际上并没有明确的定义,只有一些规则

特点:

  • 一个进程可以创建另一个进程(父进程与子进程)
  • 通过任务管理器可以看到进程

 

什么是阻塞进程

首先我们要了解CPU,它的特点是:

  • 一个单核CPU,在一个时刻,只能做一件事情
  • 那么如何让用户同时看电影,听歌、写PPT呢?
  • 在不同进程中快速切换

什么是多程序并发执行?

  • 指多个程序在宏观上并行,微观上串行
  • 每个进程会出现【执行-暂停-执行】的规律
  • 多个进程之前会出现抢资源(如打印机)的现象

进程的三个状态:

当CPU开始对进程进行资源分配时,会优先分配给非阻塞进程,当进程运行至某一个等待事件时(例:等待文件读取),该进程就成为了阻塞进程,CPU在下一轮资源分配时将不会将资源分给该进程,只有等该进程完成等待事件,状态变为就绪状态时,CPU下一轮资源分配才会轮到它。

 

什么是线程

例如浏览器进程里面有渲染引擎,V8引擎、储存模块、网络模块、用户界面模块等。每一个模块都可以放在一个线程里。

  • CPU调度和执行的最小单元
  • 一个进程中至少有一个线程,可以有多个进程
  • 一个进程中的线程共享该进程的所有资源
  • 进程的第一个线程叫做初始化线程
  • 线程的调度可以由操作系统负责,也可以用户自己负责

目前线程用到的地方不多,为什么?

因为线程的API太新了,在v10.5.0才加入Node.js,v11.7.0之前需要 --experimental-worker开启,所以兼容不好而且许多库都没有此功能支持。

另外效率也不高,官方文档已提及:

工作线程对于执行 CPU 密集型的 JavaScript 操作非常有用。 它们在 I/O 密集型的工作中用途不大。 Node.js 的内置的异步 I/O 操作比工作线程效率更高。

web应用就是典型的 I/O密集型(发送接收数据,读写数据库)。

 

Node.js中的exec、execFile、spawn、fork相关API

Node.js中的child_process用于新建子进程,子进程的运行结果储存在系统缓存之中(最大200KB),等到子进程运行结束以后,主进程再用回调函数读取子进程的运行结果。

exec

execute的缩写,用于执行bash命令,同步版本:execSync。但如果cmd被注入了,可能执行意外的代码,推荐使用execFile。

execFile

执行特定的程序,命令行的参数要用数组的形式传入,无法注入。同步版本:execFileSync。

spawn

用法与execFile方法类似,没有回调函数,只能通过流事件获取结果,没有最大200kb的限制(因为是流)。

能用spawn的时候就不要用execFile。

fork

创建一个子进程,执行Node脚本,fork('./child.js')相当于spawn('node', ['./child.js'])。

会多出一个message事件,用于父子通信。会多出一个send方法。

 

Node.js 操作进程

平时我们调用Node.js更多的是操作Node相关的进程,这里就以fork API为例:

master.js:

const n = child_process.fork('./child.js');
n.on('message', (m) => {
  console.log('PARENT got message:', m);
});

n.send({ hello: 'world' });

child.js

process.on('message', (m) => {
  console.log('CHILD got message:', m);
});

process.send({ foo: 'bar' });

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值