一 进程定义
-
定义
(1)进程是程序的执行实例
(2)程序在cpu上执行的活动叫做进程
(3)实际上没有明确的定义,只有一些规则 -
特点
(1)一个进程可以创建另一进程(父进程与子进程)。
(2)通过任务管理器可以看到进程。 -
打开一个应用程序,例如网易云,此时操作系统会新开一个进程。
-
进程是资源调度的基本实体
二 进程阻塞
在等待执行的进程中,一些在等待CPU资源,另一些在等待I/O完成(如文件读取),如果这时候把CPU分配给后者,后者还是在等待I/O,我们把后者叫做阻塞进程。因此分派程序只会把CPU分配给非阻塞进程。
三 线程
-
引入原因
早期进程既是执行的基本实体,又是资源分配的基本实体,导致进程的创建,切换,销毁太消耗CPU事件了,于是引入线程。 -
定义
(1)线程是执行的最小单元。
(2)一个进程中至少有一个线程,可以有多个线程。
(3)一个进程中的线程共享该进程的所有资源。
(4)进程的第一个线程叫做初始化线程。
(5)现成的调度可以有操作系统负责,也可以用户自己负责。 -
例如,浏览器进程里面有渲染引擎,V8引擎,存储模块,网络模块,用户界面模块等,每个模块都可以放在一个线程里。
四 子进程V.S.线程
优先使用线程,除非需要单独的搞一个资源分配再开启子进程。
五 Node.js如何进行进程控制(child_process模块)
-
exec
-
execFile
执行特定的程序;命令行的参数要用数组形式传入,无法注入。 -
spawn
用法与execFile方法类似;没有回调函数,只能通过流事件获取结果;没有最大200kb的限制(因为是流);能用spawn的时候就不要用execFile。 -
fork
创建一个子进程,执行Node脚本。会多出一个message事件,用于父子通信;会懂出一个send方法。
fork('./child.js')
//相当于
spawn('node',['./child.js'])
- 总结
exec 可以创建一个进程并获取结果,但是存在注入风险。
execFile 可以创建一个进程并获取结果,但如果使用回调形式,结果最大不能超过 200kb。
spawn 可以创建一个进程并获取结果,只支持流的形式获取结果。
fork 可以创建一个 Node.js 进程并获取结果。