Skip to content

线程和进程的区别

一、核心定义

  • 进程:正在运行的程序实例,是操作系统资源分配(内存、CPU、IO)的基本单位。程序被加载到内存后即形成进程,每个进程拥有独立的内存空间。
  • 线程:进程内的指令流,是CPU调度执行的基本单位。一个进程可以包含多个线程,线程共享进程的内存空间,执行不同的任务。

二、关键区别对比

对比维度进程线程
资源分配独立内存空间、独立文件句柄等资源共享进程的内存空间和资源
调度单位操作系统调度的基本单位CPU调度的基本单位,调度粒度更细
上下文切换成本高(需切换整个进程的内存、寄存器等状态)低(仅需切换线程的寄存器、栈等少量状态)
通信方式需通过进程间通信(IPC,如管道、Socket)可直接通过共享内存(如全局变量)通信
独立性进程间相互隔离,一个进程崩溃不影响其他进程线程共享进程资源,一个线程崩溃可能导致整个进程崩溃

三、核心特点详解

  1. 资源隔离与共享

    • 进程间内存完全隔离,通信成本高、安全性好
    • 线程共享进程的内存空间,通信便捷但需注意线程安全(如同步锁)
  2. 上下文切换成本差异

    • 进程切换需保存/恢复整个进程的页表、内存空间、文件句柄等,开销大
    • 线程切换仅需保存/恢复线程的程序计数器、寄存器、栈指针,开销小,适合频繁切换场景
  3. 线程轻量性优势

    • 线程创建、销毁的开销远小于进程
    • 适合处理并发任务(如Web服务器的请求处理),可充分利用CPU多核资源

四、面试高频问题解析

  1. 问:进程和线程的区别是什么?

    答: 进程是资源分配的基本单位,拥有独立内存空间;线程是CPU调度的基本单位,共享进程内存空间。线程上下文切换成本更低,通信更便捷,但也存在线程安全和进程崩溃风险。

  2. 问:为什么线程上下文切换比进程快?

    答: 进程切换需要保存/恢复整个进程的内存页表、文件句柄等大量状态,而线程切换仅需保存少量寄存器和栈信息,因此开销更低、速度更快。

  3. 问:多线程和多进程的适用场景有哪些?

    答: 多线程适合IO密集型任务(如网络请求、文件读写),切换成本低;多进程适合计算密集型任务或需要高隔离性的场景(如服务隔离、沙箱环境),安全性更高。

  4. 问:线程共享进程的哪些资源?

    答: 线程共享进程的堆内存、全局变量、文件句柄、信号量等资源,但每个线程拥有独立的栈内存、程序计数器和寄存器状态。

Powered by VitePress 1.6.4 | 持续更新中