🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 进程 * 计算机的程序关于某数据集合上的一次运行活动 * 系统进行资源分配和调度的基本单位 * 三态模型: * * 运行:当进程在处理机上运行时,此状态的进程数目小于等于处理器的数目 * * 就绪:当进程获得除处理机以外的一切资源时,由时间片用完进入该状态排入低优先级队列;由`I/O`操作完成是进入该状态排入高优先级队列; * * 阻塞:等待或睡眠,进程暂停运行 * 五态模型: * * 新建态:进程刚刚创建未被提交,等待系统创建进程的所有必要信息 * * 活跃就绪/静止就绪: * * * 活跃就绪:指进程在主存里面并且可以调度的状态 * * * 静止就绪(挂起就绪):进程被对换到辅存时的就绪状态,是不能直接被调度的状态 * * 运行 * * 活跃阻塞/静止阻塞: * * * 活跃阻塞:进程已在主存,一旦等待的事件产生便进入活跃就绪状态 * * * 静止阻塞:进程切换到辅存时的阻塞状态,等待的事件产生进入静止就绪状态 * * 终止态:进程已结束运行,回收除进程控制块之外的其他资源 ## 线程 * 轻量级进程,是程序执行流的最小单元 * 是进程中的一个实体,被系统调度和分派的最小单位 * 与同进程中的其它线程共享进程所拥有的全部资源 * 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行 * 每个程序至少有1个线程 * 状态 * * 就绪:线程具备运行的所有条件,逻辑上可以运行,等待处理机 * * 阻塞:线程等待一个事件,逻辑上不可执行 * * 运行:线程占用处理机正在运行 ## 协程 * 用户态的轻量级线程,协程的调度完全有用户控制 * 协程拥有自己的寄存器上下文和栈。 * 协程调度切换时,将寄存器上下文和栈保存到其他地方,切回来,在恢复。 * 直接操作栈基本没有内核开销 * 可以不加锁访问全局变量 ## 进程和线程的区别 1. 线程是进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有自己的独立地址空间 2. 进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 3. 线程是处理器调度的基本单位,但进程不是 4. 进程和线程均可并发执行 ## 线程和协程的区别 1. 一个线程可以多个协程,一个进程也可以单独拥有多个协程 2. 线程进程都是同步机制,而协程是异步 3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态 >* 多进程 >* * 系统允许两个或以上的进程处于运行状态,就是多进程 >* * 多开一个进程,多分配一份资源,进程间通讯不方便 >* 多线程 >* * 线程就是把一个进程分为很多片,每一片都可以是独立的流程 >* * 与多进程的区别是只会使用一个进程的资源,线程间可以直接通信 ## 同步阻塞 * 最早通过多进程、多线程来解决并发IO问题 * 一个请求创建一个进程,然后子进程进入循环同步阻塞与客户端连接,收发处理数据