1.108、线程与进程的区别?

1. 定义与本质

  • • 进程(Process)
    是操作系统分配资源的基本单位,是程序的一次执行实例。拥有独立的地址空间、代码段、数据段和系统资源(如文件句柄、信号量等)。进程之间相互独立,崩溃互不影响。
  • • 线程(Thread)
    是进程内的一个执行单元,是CPU调度和分派的基本单位。线程共享所属进程的地址空间和资源,但拥有自己的栈、寄存器、程序计数器等。

2. 资源拥有与共享

特性 进程 线程
地址空间 独立 共享进程的地址空间
资源 独立拥有 共享进程的全部资源
栈空间 独立 独立
调度单位 操作系统调度单位 操作系统调度单位

3. 创建与销毁开销

  • • 进程:创建和销毁开销大,涉及分配独立地址空间和系统资源。
  • • 线程:创建和销毁开销小,资源共享,切换速度快。

4. 通信方式

  • • **进程间通信(IPC)**较复杂,需通过管道、消息队列、共享内存、信号等机制。
  • • 线程间通信简单,直接通过共享内存(进程地址空间)即可,但需同步机制防止竞态。

5. 稳定性与安全性

  • • 进程隔离性强,一个进程崩溃不会影响其他进程。
  • • 线程共享内存,线程崩溃可能导致整个进程崩溃,安全性较低。

6. 适用场景

  • • 多进程适合对资源隔离要求高、稳定性要求高的场景。
  • • 多线程适合需要高效并发、频繁切换且共享大量数据的场景。

7. C++中的体现

  • • C++11引入std::thread,用于创建和管理线程。
  • • 进程管理通常依赖操作系统API(如forkCreateProcess等)。

简要总结

维度 进程 线程
资源拥有 独立 共享进程资源
地址空间 独立 共享进程地址空间
调度单位 操作系统资源分配单位 操作系统CPU调度单位
创建销毁开销
通信复杂度 高(需IPC) 低(共享内存)
稳定性
适用场景 资源隔离、稳定性要求高 高效并发、共享数据场景

个人教程网站内容更丰富:(https://www.1217zy.vip/)
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。

阅读剩余
THE END