1. 基本定位
- 进程:操作系统分配资源的基本单位(资源容器)。
- 线程:操作系统调度执行的基本单位(执行实体)。
2. 系统层面理解
Windows
- 进程只负责管理资源,不参与调度;
- 真正被 CPU 调度、在就绪 / 运行 / 阻塞之间切换的是线程;
- 程序从 main 开始执行,称为主线程。
Linux
- 内核不严格区分进程与线程,线程本质是轻量级进程(LWP);
- 同样可以被 CPU 直接调度;
- 包含主线程的程序整体称为进程。
3. 资源共享(核心区别)
进程与进程之间:默认完全独立,不共享任何资源。如需通信或共享数据,必须通过 IPC 机制:管道、消息队列、共享内存、信号量、套接字等。
同一进程内的所有线程:共享进程的全部资源包括:虚拟地址空间、全局变量、文件描述符、信号处理方式、动态库等。线程私有数据:栈空间、寄存器上下文、线程局部存储(TLS)。
4. 切换开销
- 进程切换开销很大:需要切换页表、刷新 TLB、保存完整进程环境。
- 线程切换开销很小:同一进程内只需切换栈、寄存器,不切换地址空间。
5. 稳定性与安全性
- 进程相互独立:一个进程崩溃,不会影响其他进程。
- 线程共享地址空间:一个线程出现除零、野指针等错误,整个进程直接崩溃。
6. 通信与同步
- 进程间通信复杂,必须使用 IPC。
- 线程间可直接通过全局变量交互,但必须使用互斥锁、条件变量等做同步。