进程

进程:程序执行的实例
程序在CPU上执行时的活动叫做进程

CPU

一个CPU在一个时刻只能做一件
所以在多程序并发执行时,是在不断地在不同的进程中切换的
宏观上并行,微观上串行

进程的两个状态:运行态和非运行态

进程队列:
image.png

非运行态又分阻塞状态和就绪状态:
这时就分成三个状态:运行、阻塞、就绪
image.png
如果是阻塞的,那么就必须等待到就绪状态才能运行
如果在运行过程中发生I/O事件,那么就会变成阻塞状态。

线程

线程就是轻量级的进程
引入线程的原因:进程的创建、切换、销毁太消耗CPU时间了
于是我们就把进程的 执行的基本实体 功能给了线程。进程只作为线程的容器(资源分配的基本实体)

引入线程之后:
线程才是CPU调度和执行的最小单元
一个进程至少有一个线程,可以有多个线程
一个进程中的线程共享该进程的所有资源

在node.js里面如何新建一个子进程

使用child_process
使用之后,node会开启一个子进程然后运行它,运行的结果储存在系统缓存之中(最大200kb),然后把这个缓存通过回调返回给主进程。

4个API

exec
execFile
spawn:执行任意程序
fork:执行nodejs的程序

  1. exec 可以创建一个进程并获取结果,但是存在注入风险
  2. execFile 可以创建一个进程并获取结果,但如果使用回调形式,结果最大不能超过 200kb
  3. spawn 可以创建一个进程并获取结果,只支持流的形式获取结果
  4. fork 可以创建一个 Node.js 进程并获取结果

由于操作线程的API太新,了解一下即可。