进程线程

266 阅读2分钟

一 进程定义

  1. 定义
    (1)进程是程序的执行实例
    (2)程序在cpu上执行的活动叫做进程
    (3)实际上没有明确的定义,只有一些规则

  2. 特点
    (1)一个进程可以创建另一进程(父进程与子进程)。
    (2)通过任务管理器可以看到进程。

  3. 打开一个应用程序,例如网易云,此时操作系统会新开一个进程。

  4. 进程是资源调度的基本实体

二 进程阻塞

在等待执行的进程中,一些在等待CPU资源,另一些在等待I/O完成(如文件读取),如果这时候把CPU分配给后者,后者还是在等待I/O,我们把后者叫做阻塞进程。因此分派程序只会把CPU分配给非阻塞进程。

三 线程

  1. 引入原因
    早期进程既是执行的基本实体,又是资源分配的基本实体,导致进程的创建,切换,销毁太消耗CPU事件了,于是引入线程。

  2. 定义
    (1)线程是执行的最小单元。
    (2)一个进程中至少有一个线程,可以有多个线程。
    (3)一个进程中的线程共享该进程的所有资源。
    (4)进程的第一个线程叫做初始化线程。
    (5)现成的调度可以有操作系统负责,也可以用户自己负责。

  3. 例如,浏览器进程里面有渲染引擎,V8引擎,存储模块,网络模块,用户界面模块等,每个模块都可以放在一个线程里。

四 子进程V.S.线程

优先使用线程,除非需要单独的搞一个资源分配再开启子进程。

五 Node.js如何进行进程控制(child_process模块)

  1. exec

  2. execFile
    执行特定的程序;命令行的参数要用数组形式传入,无法注入。

  3. spawn
    用法与execFile方法类似;没有回调函数,只能通过流事件获取结果;没有最大200kb的限制(因为是流);能用spawn的时候就不要用execFile。

  4. fork
    创建一个子进程,执行Node脚本。会多出一个message事件,用于父子通信;会懂出一个send方法。

    fork('./child.js')
    //相当于
    spawn('node',['./child.js'])
  1. 总结
    exec 可以创建一个进程并获取结果,但是存在注入风险。
    execFile 可以创建一个进程并获取结果,但如果使用回调形式,结果最大不能超过 200kb。
    spawn 可以创建一个进程并获取结果,只支持流的形式获取结果。
    fork 可以创建一个 Node.js 进程并获取结果。