目录
前言
进程、线程和协程作为操作系统的重要概念,对我们了解和学习操作系统有很大的帮助,本文就简单的介绍这三者之间的关系。
概念介绍
进程:操作系统资源分配的基本单位,拥有独立的内存空间、文件描述符等系统资源,属于操作系统内核级。
线程:进程内的执行单元,共享进程的资源(内存、文件等),是 CPU 调度的基本单位,是进程内的 “轻量级执行流”,属于操作系统内核级。
协程:用户态的轻量级执行单元,运行在线程内,由程序自身控制调度,不依赖内核,是线程内的 “微执行流”,属于用户态。
下面图片是这三者的包含关系:

特点比较
| 特性 | 进程(Process) | 线程(Thread) | 协程(Coroutine) |
|---|---|---|---|
| 资源占用 | 大(独立内存空间、PCB 等,通常 MB 级) | 中(共享进程资源,栈空间通常 KB-MB 级) | 极小(仅保存上下文,通常几 KB) |
| 调度方式 | 内核调度(抢占式,操作系统控制切换) | 内核调度(抢占式,操作系统控制切换) | 用户态调度(协作式,程序主动让出 CPU) |
| 切换开销 | 高(需切换地址空间、刷新 TLB 等) | 中(需保存线程上下文,切换内核态) | 极低(仅保存寄存器、程序计数器等) |
| 并发能力 | 低(受内存和系统资源限制,通常数百个) | 中(受线程栈内存限制,通常数千个) | 极高(支持数十万甚至数百万个) |
| 资源隔离性 | 强(进程间地址空间独立,互不干扰) | 弱(共享进程资源,需同步机制避免冲突) | 弱(运行在同一线程,共享线程资源) |
| 通信方式 | 复杂(管道、信号、共享内存、Socket 等) | 简单(共享内存,需锁 / 信号量同步) | 简单(直接共享线程内变量,需避免竞态) |
| 崩溃影响 | 单个进程崩溃不影响其他进程 | 线程崩溃可能导致整个进程崩溃 | 协程崩溃可能导致所在线程崩溃 |
调度与执行机制
进程:操作系统通过进程控制块(PCB)管理进程,调度时需切换整个进程的地址空间和资源上下文,开销最大。
线程:线程共享进程的地址空间,调度时只需切换线程私有数据(如栈、寄存器),开销小于进程。
协程:完全由用户程序控制(如通过yield、await关键字),切换时无需陷入内核,仅在用户态保存 / 恢复上下文。
适用场景
进程:需要资源隔离的独立任务(如多程序运行)、稳定性要求高的场景(崩溃不相互影响)。
线程:进程内并发任务(如同一程序的多任务处理)、CPU 密集型或 IO 密集型任务(需多核支持)。
协程:高并发 IO 密集型任务(如网络请求、磁盘 IO)、需要大量轻量级执行单元的场景。
关系总结
包含关系:一个进程可以包含多个线程,一个线程可以包含多个协程。
资源共享:进程间独立,线程共享进程资源,协程共享线程资源。
调度依赖:进程和线程依赖内核调度,协程由用户程序调度,不使用内核。
进程、线程与协程解析
4612

被折叠的 条评论
为什么被折叠?



