一篇吃透:进程、线程、协程 上下文切换

张开发
2026/4/21 20:12:33 15 分钟阅读

分享文章

一篇吃透:进程、线程、协程  上下文切换
一、引言为什么需要理解进程、线程、协程在操作系统与高性能编程中“并发”是核心问题。而支撑并发的三大基础实体就是进程Process线程Thread协程Coroutine它们的本质区别、资源消耗、上下文切换方式直接决定了系统的并发能力、响应速度、资源占用。二、进程Process操作系统资源分配的最小单位1. 定义进程是操作系统分配资源CPU、内存、文件、套接字的基本单位。每个进程拥有独立的地址空间互不干扰。可以理解为一个正在运行的程序 一个独立的进程2. 核心特点独立性强一个进程崩溃不影响其他进程资源隔离内存、文件、信号完全独立开销巨大创建、销毁、切换成本最高调度单位操作系统级调度内核调度3. 典型场景打开一个浏览器启动一个游戏客户端运行一个独立 APP多进程服务稳定性优先三、线程ThreadCPU 调度的最小单位1. 定义线程是进程内部的执行单元也叫轻量级进程。一个进程至少包含一个主线程。2. 核心特点共享进程资源内存、文件、句柄全部共享开销远小于进程CPU 调度的基本单位一个线程崩溃整个进程崩溃内核调度由操作系统切换四、协程Coroutine用户态轻量级执行单元1. 定义协程是用户态线程完全由程序自己控制切换不陷入内核。是一种轻量级并发的终极方案。2. 核心特点用户态切换无内核陷入切换成本极低接近函数调用单线程内实现高并发无内核调度消耗高并发、高性能框架标配Go、Java、Python、C五、上下文切换Context Switch并发的核心成本1. 什么是上下文一个执行单元需要继续运行所必须的信息程序计数器PC寄存器栈指针页表、状态等2. 什么是上下文切换操作系统从一个执行单元切到另一个时需要保存当前上下文加载下一个上下文这个过程就叫上下文切换3. 上下文切换的消耗消耗 CPU消耗内存切换越频繁系统越慢高并发系统必须减少切换次数六、三种上下文切换深度对比最核心维度进程切换线程切换协程切换切换内容切换整个地址空间、页表、寄存器只切换寄存器、程序计数器、栈只保存 / 恢复少量上下文栈 / 寄存器内核陷入必须必须完全不需要切换成本最高中等最低切换速度最慢中等最快适用场景少量、稳定、独立任务常规高并发超高并发、高性能场景七、一张表彻底看懂面试可直接背维度进程Process线程Thread协程Coroutine定义操作系统资源分配的最小单位进程内的CPU 调度最小单位用户态轻量级执行单元运行环境内核态内核态用户态无需陷入内核地址空间独立隔离性最强共享所属进程空间共享所属线程 / 进程空间调度者操作系统内核操作系统内核应用程序 / 用户态框架切换开销极高最重中等较轻极低接近函数调用稳定性最高一个崩溃不影响其他中等一个崩溃可能导致进程崩溃高单线程内安全切换并发性低中极高百万级并发典型应用独立程序、多进程服务常规高并发服务高性能网关、Go、云原生八、总结进程是资源分配的最小单位独立、稳定、昂贵。线程是 CPU 调度的最小单位轻量、共享、内核调度。协程是用户态轻量级并发单元切换成本极低、高性能标配。上下文切换是并发的核心成本切换越轻量系统越快。高并发系统的演进路线进程 → 线程 → 协程越来越轻、越来越快、越来越高效。

更多文章