fork 和 spawn 是 Node.js 中用于创建子进程的两个方法,二者存在一些区别:
fork 是衍生当前进程,spawn 是执行一个新程序
fork 会衍生当前进程,子进程会运行和父进程相同的 JavaScript 文件。spawn 会执行一个全新的程序文件。
fork 共享内存,spawn 不共享
通过 fork 创建的子进程会共享父进程的内存,可以通过 IPC 通信。spawn 创建的进程是全新的,不共享内存,只能通过 stdio 通信。
fork 监听 ‘message’ 事件,spawn 需要手动设置 stdio
fork 会自动在父子进程之间建立 IPC 通信通道,可以监听 ‘message’ 事件。spawn 需要手动通过 stdio 将 stdin, stdout, stderr 传递给子进程,实现通信。
fork 返回的对象是 ChildProcess,spawn 返回的是 Stream
fork 返回的对象可以直接发送消息,监听退出事件等。spawn 返回的 Stream 需要手动读写数据。
总结:
- 如果需要在 Electron 中衍生出与主进程类似的渲染进程,应选择 fork
- 如果是执行一个全新的进程,应选择 spawn
- 如果需要进程间方便的 IPC 通信,应选择 fork
- 如果更细致地控制子进程的 stdio,应选择 spawn
在 Electron 中,我们通常会:
- 通过 fork 来衍生渲染进程,以实现共享内存和 IPC 通信
- 通过 spawn 执行一些子进程,通过手动控制 stdio 来实现进程通信
所以 fork 和 spawn 在 Electron 中常常同时使用,各负不同的职责。