进程,线程,协程都问烂了,你还答不出来?
特性进程线程协程角色资源分配的基本单位CPU 调度的基本单位用户态轻量级线程内存空间完全独立,相互隔离同进程内共享堆内存共享堆内存,有独立栈切换成本极高(需换页表地址空间)中(需保存上下文)极低(用户态控制)稳定性极高(崩溃互不影响)较差(一个挂全家挂)较差(取决于逻辑)调度方式操作系统内核调度操作系统内核调度用户程序手动调度版权声明:本文归“小饼干”所有,未经许可不得转载。
作者:小饼干 | 2026年5月15日
在 Java 面试中,这三个概念几乎是必考题。但很多人只是死记硬背了几句定义,一旦面试官深入问一句“为什么进程切换开销大?”或者“协程到底快在哪?”,就开始支支吾吾。
今天咱们不整那些虚的,直接从资源分配和调度机制的底层逻辑出发,把进程、线程、协程彻底讲透。
一、 进程(Process):资源分配的“大管家”
基本定义:进程是操作系统进行资源分配的基本单位。
当你打开微信、IntelliJ IDEA 或者运行一个 Java 程序时,系统就会为你创建一个进程。操作系统会给这个进程分配一套完整的“家当”:虚拟内存、文件句柄、页表、信号量等。
1. 深度拆解进程资源
- 页表与虚拟内存:每个进程都以为自己独占了整个物理内存,这靠的就是页表映射。
- 文件句柄(File Handle):这是一个关键点。进程不能直接读写磁盘或网络 Socket,它必须向内核申请一个“编号”(句柄)。操作系统会记录这个编号对应哪个文件、读到了哪里。
- 信号量(Semaphore):用于协调进程内或跨进程的排队与同步,它是保护共享资源的计数器。
2. 为什么进程最稳定?
- 隔离性:每个进程都有独立的内存空间(堆、方法区完全独立)。一个进程崩溃,内核直接回收它的内存,不会污染隔壁进程。
- 权限保护:进程运行在用户态,无法直接访问内核数据。
- 独立性:进程异常关闭只会释放它持有的句柄和信号量,其他进程丝毫不受影响。这也是为什么浏览器现在倾向于一个标签页一个进程的原因。
二、 线程(Thread):CPU 调度的“打工人”
基本定义:线程是 CPU 调度与执行的基本单位。
线程不能独立存在,它必须“寄生”在进程中,利用进程提供的资源和运行环境。
1. 线程的轻量化之道
- 共享资源:同一进程内的所有线程共享该进程的全部资源(堆内存、方法区、文件句柄等)。
- 私有空间:线程只保留自己的一亩三分地:栈(Stack)、**程序计数器(PC)**和本地变量。
- 切换开销低:进程切换需要换掉整个地址空间和页表;而线程切换只需要保存并恢复自身的寄存器状态和 PC 即可。
2. 线程的硬伤
- 稳定性差:这是由于共享资源导致的。一个线程如果发生严重错误(比如段错误),往往会拖累整个进程一起挂掉。
- 线程安全问题:因为大家共享堆内存,如果不同步访问,数据就全乱了。这时候就需要 volatile、synchronized 等机制出场,但也带来了额外的复杂度。
三、 协程(Coroutine):用户态的“性能怪兽”
基本定义:协程是一种用户态的轻量级线程。
在 Java 21 引入虚拟线程(Virtual Threads)之前,协程在 Go 和 Python 中已经大放异彩。它的核心价值在于:完全由用户程序控制,无需操作系统内核参与。
1. 为什么协程比线程快得多?
- 无内核态切换:线程的切换需要从用户态切到内核态,这个动作很重。协程始终跑在用户态,调度逻辑由业务代码或运行时环境实现,效率极高。
- 高并发利器:在海量连接的场景下,创建几万个线程系统可能就崩了,但创建几万个协程只是多占了点堆内存而已。
- 内存模型:协程拥有独立的寄存器上下文和栈空间,但同一进程内的协程共享堆内存。
2. 性价比的代价
- 用法复杂:协程需要程序员手动控制挂起(Yield)与恢复(Resume)。它的调度逻辑嵌入在业务代码中,对开发者的心智负担较重。
四、 总结:一表看透差异
| 特性 | 进程 | 线程 | 协程 |
|---|---|---|---|
| 角色 | 资源分配的基本单位 | CPU 调度的基本单位 | 用户态轻量级线程 |
| 内存空间 | 完全独立,相互隔离 | 同进程内共享堆内存 | 共享堆内存,有独立栈 |
| 切换成本 | 极高(需换页表地址空间) | 中(需保存上下文) | 极低(用户态控制) |
| 稳定性 | 极高(崩溃互不影响) | 较差(一个挂全家挂) | 较差(取决于逻辑) |
| 调度方式 | 操作系统内核调度 | 操作系统内核调度 | 用户程序手动调度 |
版权声明:本文归“小饼干”所有,未经许可不得转载。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)