问题: 什么是线程,什么是进程,两者的基础区别是什么?

👇 点击展开/折叠 面试背诵模板(建议先背这个) 进程是操作系统资源分配的基本单位,拥有独立的内存空间(代码、数据、堆栈)和系统资源;线程是CPU调度的基本单位,是进程内的执行流,共享所属进程的内存空间和资源,仅拥有独立的栈和寄存器上下文。核心区别:进程间内存隔离、切换开销大、通信需IPC(管道、队列等);线程间内存共享、切换开销小、通信直接(共享变量),但需加锁防止竞态,且单个线程崩溃可能导致整个进程崩溃。
---

核心区别速览表

维度 进程 线程
本质 资源分配的基本单位 CPU调度的基本单位
内存 独立地址空间(隔离) 共享进程地址空间
切换开销 大(切换页表、刷新TLB) 小(仅切换栈和寄存器)
通信方式 IPC(管道、消息队列、共享内存) 直接读写共享变量
稳定性 一方崩溃不影响其他进程 一方崩溃影响整个进程
创建销毁 开销大,慢 开销小,快

适用场景选择

场景类型 推荐方案 原因
CPU密集型(复杂计算、视频解码) 多进程 充分利用多核,绕过GIL限制
I/O密集型(网络爬虫、文件读写、Web服务) 多线程 / 协程 线程在IO阻塞时释放GIL,切换开销小
高并发、海量任务 协程(如asyncio) 比线程更轻量,无需锁机制

Python 中 GIL 对线程和进程的影响

Python 的 GIL(全局解释器锁) 限制了同一时刻仅有一个线程执行 Python 字节码,导致多线程在 CPU 密集型任务中无法利用多核优势,实际表现为串行。多进程则每个进程拥有独立的解释器和锁,可充分利用多核,但创建开销大且通信成本高。因此 Python 多线程适用于 I/O 密集型任务(I/O 等待时释放 GIL),多进程适用于 CPU 密集型任务。

进程与线程的协作关系(数据结构视角)

  • 进程:操作系统通过 PCB(进程控制块)管理,包含 PID、内存指针、打开文件列表等。
  • 线程:操作系统通过 TCB(线程控制块)管理,包含 TID、程序计数器、寄存器、栈指针,并指向所属进程的 PCB。

进程拥有独立的页表(虚拟地址映射),线程共享同一页表,这是两者内存隔离与共享的底层硬件基础。