进程、线程与协程
- 进程:
系统进行资源分配和调度的基本单位,是应用程序运行的载体。
进程是一个抽象的概念,一般由程序、数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。
多进程中的数据天然是隔离的,不存在并发的问题;但是创建线程时间上面的开销很慢
- 线程:
线程是进程的一个实体,一个进程可以由多个线程,是 CPU 调度与分派的基本单位,由线程ID、程序计数器、寄存器集合和堆栈组成,共享进程的内存空间。
它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
- 协程
轻量级的线程,一个线程拥有多个协程;协程的暂停完全由程序控制,发生在用户态,没有内核切换的开销
- 线程的切换由操作系统负责调度,协程由用户自己进行调度
- 线程 Stack 默认为 1M,协程更加轻量,接近 1K
- 由于在同一个线程上,避免的竞争关系而使用锁
- 适用于被阻塞且需要大量并发的场景。但不适合大量计算的多线程