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?