child_process

child_process

进程及线程

一个任务实际上就是一个进程(Process),它是操作系统进行资源分配和调度的最小单位,是应用程序运行的载体,有自己独立的内存空间。

一个进程,如播放器在播放视频的过程,也同时播放音频、字幕。 在一个进程内要同时干多件事就需要运行多个子任务,这些进程内的子任务就是线程(Thread),它是程序执行的最小单位,一个进程可以有一个或多个线程,各个线程间可以共享进程的内存空间。

Nodejs四种创建进程的方式

spawn()

语法:

child_process.spawn(command[, args][, options])

spawn()适合用在进程的输入、输出数据量比较大的情况(因为它支持以 stream 的使用方式),可以用于任何命令。

spawn()方法用于从执行的命令创建一个新进程,命令的参数被作为数组传入,忽略参数时将传入一个空数组。

spawn()方法创建一个子进程来执行特定命令,用法与execFile方法类似,但是没有回调函数,只能通过监听事件,来获取运行结果。

spawn()方法的部分配置(options)如下:

.exec()、.execFile()、.fork()底层都是通过.spawn()实现的。

exec/execFile

语法:

exec()execFile()会使用一个 Buffer 来存储进程执行后的标准输出结果,可以一次性在 callback 里面获取到。不太适合输出数据量大的场景。

exec()示例:

execFile()示例:

两个方式都可以使用的配置:

exec()会创建一个shell,效率可能稍慢。所以不支持 I/O 重定向和文件查找这样的行为。

fork

语法:

child_process.fork()方法是 child_process.spawn() 的一个特例,专门用于衍生新的 Node.js 进程,只能运行Node脚本。 跟 child_process.spawn() 一样返回一个 ChildProcess 对象。 返回的 ChildProcess 会有一个额外的内置的通信通道,它允许消息在父进程和子进程之间来回传递。

配置options选项跟spawn()一致。

参考资料:

https://segmentfault.com/a/1190000005004946#articleHeader4 https://itbilu.com/nodejs/core/E1kBYnPH.html https://segmentfault.com/a/1190000007735211 http://javascript.ruanyifeng.com/nodejs/child-process.html#toc5

Last updated

Was this helpful?