一、基本定义

进程(Process)

操作系统资源分配最小单位,程序的一次独立运行实例。
拥有独立内存空间、文件句柄、CPU 时间片、堆、全局变量等完整系统资源。
例:打开的浏览器、Java 程序、微信,每一个都是独立进程。

线程(Thread)

进程内部CPU 调度最小执行单位,依附进程存在,共享所属进程全部资源。
一个进程至少包含 1 个主线程,可创建多个子线程。
例:浏览器中多标签加载、软件同时刷新界面 + 后台下载,靠多线程实现。


二、核心联系

  1. 依附关系:线程不能独立存在,必须隶属于某一个进程;进程消亡,内部所有线程全部销毁。

  2. 资源共享:同一进程下所有线程共享进程的堆、全局变量、文件、网络端口、内存地址空间;仅私有栈、寄存器、局部变量。

  3. 生命周期绑定:进程启动自动创建主线程,主线程结束(无守护线程)则整个进程退出。

  4. 调度逻辑:CPU 只调度线程,进程仅作为资源容器,不直接参与 CPU 执行调度。

  5. 通信关系

    • 同进程线程:直接读写共享变量,通信简单;

    • 跨进程通信:必须 IPC(管道、Socket、共享内存),成本极高。


三、关键区别(表格直观对比)

对比维度 进程 线程
系统层级 资源分配单位 CPU 调度执行单位
内存空间 拥有独立完整地址空间,进程间隔离 共享进程地址空间,仅私有栈内存
切换开销 极大。需刷新页表、缓存、切换完整内存上下文 极小。仅切换寄存器、栈,资源不重置
资源隔离 完全隔离,一个进程崩溃不影响其他进程 无隔离,一个线程崩溃直接导致整个进程宕机
创建销毁成本 高,操作系统分配完整内存、句柄资源 低,仅在内核 / 用户态创建执行流
通信方式 IPC:管道、消息队列、Socket、共享内存 直接读写全局变量、锁、信号量
调度主体 不参与 CPU 调度 CPU 真正调度、分配时间片的对象
数据私有 代码段、堆、栈、全局变量全部私有 仅栈、局部变量、寄存器私有

四、举例理解

进程比作一栋独立建筑:

  • 建筑拥有独立水电、消防、场地、门禁(完整系统资源);

  • 一栋楼垮掉,隔壁的建筑不受影响。

线程比作建筑里的员工

  1. 所有员工共用建筑水电、会议室、网络(共享进程资源);

  2. 每个员工只有自己的办公桌、笔记本(私有栈、局部变量);

  3. 一个员工操作失误导致整个建筑发生火灾(线程崩溃),整栋楼直接停用;

  4. 更换员工(线程切换)只换工位,不用重建大楼;更换整栋楼(进程切换)成本极高。


五、使用场景区分

适合多进程:

  1. 程序需要高稳定性隔离(如浏览器多标签、服务器沙盒);

  2. 任务资源占用完全独立,不适合共享内存;

  3. 多机器 / 多程序分布式场景。

适合多线程:

  1. IO 密集型任务(文件读写、网络请求、接口并发);

  2. 需要大量共享数据、频繁并发执行;

  3. 追求低切换开销,提升程序响应速度(UI 界面、后台同步)。

六、易混知识点

  1. 守护线程:Java/Python 存在,主线程退出后守护线程自动销毁,用于日志、定时任务;

  2. 并发与并行:单核 CPU 靠线程切换实现并发;多核 CPU 可让多线程、多进程真正并行;

  3. GIL 锁(Python):Python 同一时刻一个进程内仅一条线程执行 CPU 计算,IO 场景多线程仍有效。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐