进程与线程的区别和联系
·
前言
进程和线程是操作系统中非常核心的概念,也是面试高频考点。很多人容易混淆两者。简单来说:进程是资源分配的最小单位,线程是CPU调度的最小单位。本文结合操作系统底层原理,梳理进程、线程的概念、联系、区别,以及优缺点与使用场景。
前置知识回顾
- 进程:操作系统对运行中程序的抽象,程序的一次运行实例。操作系统以进程为单位分配内存、文件句柄等系统资源。
- PCB(进程控制块):操作系统管理进程的数据结构,记录PID、内存映射、打开文件、信号、进程状态等信息。
- 进程调度:单核CPU依靠时间片轮转,切换不同进程,实现宏观并发;进程切换需要做完整上下文切换,开销较大。
一、什么是线程
线程(Thread),也叫轻量级进程。
一个进程内部可以拥有多个线程,这些线程共享该进程的绝大部分资源,每个线程拥有自己独立的:
- 线程ID
- 程序计数器PC
- 一组寄存器
- 栈(栈内存,保存局部变量、函数调用栈)
同一个进程内所有线程共享:
- 进程的地址空间(堆、全局变量、代码段)
- 文件描述符、打开的文件
- 信号处理、权限、内存资源
形象理解:
进程 = 一个工厂;
线程 = 工厂里面的工人;
整个工厂资源(车间、设备、仓库)所有工人共享;每个工人有自己独立工作台(线程栈、寄存器);工人(线程)被CPU调度干活。
二、进程与线程的联系
- 线程依附于进程存在:线程不能独立存在,线程必须属于某一个进程。进程消亡,内部所有线程也全部销毁。
- 一个进程至少包含1个线程(主线程),程序启动时操作系统默认创建主线程。
- 调度单位是线程:CPU调度器实际调度对象是线程,不是进程;进程只是资源容器。
- 同一进程下多个线程之间通信非常方便,直接读写共享的全局内存;进程之间天然隔离,通信必须依靠IPC(管道、共享内存、信号、网络等)。
- 不管是进程还是线程,都有自己状态:就绪、运行、阻塞,都会参与CPU调度。
三、进程与线程核心区别
| 对比维度 | 进程(Process) | 线程(Thread) |
|---|---|---|
| 资源关系 | 资源分配最小单位,每个进程拥有独立完整资源 | 共享所属进程资源,仅有少量私有资源,CPU调度最小单位 |
| 内存地址空间 | 进程之间地址空间完全隔离,互不感知 | 同一进程内所有线程共享同一个地址空间 |
| 切换开销 | 进程切换:需要切换页表,刷新缓存,保存完整进程上下文,开销大 | 线程切换:只切换线程私有寄存器、栈,不用切换地址空间,开销小 |
| 通信方式 | 进程间通信IPC:管道、共享内存、信号、Socket、文件等,复杂 | 直接读写进程内共享内存,简单,但需要处理线程安全、锁竞争 |
| 生命周期影响 | 一个进程崩溃,不会影响其他进程 | 一个线程崩溃,会导致整个所属进程直接崩溃,所有线程一起结束 |
| 数据共享 | 数据默认隔离,共享成本高 | 数据天然共享,共享成本低,会带来竞态条件问题 |
| 创建销毁 | 创建、销毁进程开销大 | 创建、销毁线程开销更小 |
四、多进程与多线程优缺点
多进程模型
优点:
- 强隔离,一个进程出错崩溃,不干扰其他进程,稳定性高。
- 可以充分利用多核CPU,每个进程可以跑在不同CPU核心。
缺点:
- 创建、切换开销大,占用内存高。
- 进程之间数据共享麻烦,IPC编程复杂。
例子:Nginx多进程模式,Chrome浏览器每个标签页一个进程。
多线程模型
优点:
- 切换成本低,并发性能好。
- 共享内存,线程之间传递数据简单高效。
缺点:
- 线程之间没有隔离,任意一个线程崩溃,整个进程挂掉。
- 共享资源会产生竞态条件,需要锁机制保证线程安全,容易出现死锁。
例子:Java程序,整个JVM是一个进程,内部靠多线程处理任务。
五、常见误区澄清
- 误区:多线程一定比多进程快
真相:线程切换开销小,但大量锁竞争、上下文频繁切换也会性能很差;多进程隔离好,适合高稳定性场景,要根据业务选择。
- 误区:多核CPU上进程才可以并行,线程不能并行
真相:多核CPU上,同一个进程的多个线程可以分配到不同CPU核心,实现真正并行执行。
- 误区:线程越多性能越高
真相:线程数量过多,大量时间消耗在线程切换,性能反而下降。
六、总结
- 进程:资源分配的最小单位;线程:CPU调度的最小单位。
- 线程寄生在进程内部;一个进程至少有一个主线程。
- 进程间内存隔离,通信依赖IPC;同进程线程共享地址空间,通信简单,但要处理线程安全。
- 进程切换开销大,隔离性强;线程切换开销小,但没有隔离,单线程异常会毁掉整个进程。
- 多进程适合追求稳定性场景;多线程适合IO密集、需要大量数据共享的并发场景。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)