跳到主要内容

认识

2024年04月09日
柏拉文
越努力,越幸运

一、认识


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

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

二、多进程


多进程就是进程的复制(fork),fork 出来的每个进程都拥有自己的独立空间地址、数据栈,一个进程无法访问另外一个进程里定义的变量、数据结构,只有建立了 IPC 通信,进程之间才可数据共享。Node 提供了 child_process 模块来创建子进程,方法有:

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

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

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

  4. execFile

通过 child_process 模块,可以实现1个主进程,多个子进程的模式,主进程称为master进程,子进程又称为工作进程。

三、多进程服务


Node.js 官方提供的 Cluster 模块不仅充分利用机器 CPU 内核开箱即用的解决方案,还有助于 Node 进程增加可用性的能力,Cluster 模块是对多进程服务能力的封装。