进程和线程的区别

马谦马谦马谦 2019年4月17日21:01:17 发表评论
文章最后编辑于:2020-2-26 21:01:40

一、两者对比

进程是最小的资源分配单位,线程是最小的执行单位:

  • 每个进程至少有一个线程,任务的执行都是由线程来完成,也就是说,线程时进程运行时的实体。
  • 线程运行时依赖进程中分配的资源,一个进程可以有多个线程,但是每个线程只属于一个进程。

进程之间相互独立,线程之间数据共享:

  • 每个进程拥有自己独立的地址空间:堆、栈等。
  • 线程之间大部分数据是共享的,它只拥有自己独立的栈,局部堆以及单独的信号屏蔽字等。

进程创建和切换的开销比线程要大:

  • 操作系统切换进程的时候,需要保存进程上下文(线程也属于进程上下文中的内容)。创建进程时,子进程需要拷贝父进程的数据内容,遵循读时共享、写时复制的原则。
  • 线程切换只需要切换线程所有的栈空间,只需要移动栈指针即可,开销远小于进程切换。

进程间通信比线程间通信麻烦:

  • 进程间通信依赖IPC通信方式:共享内存、管道以及socket等,实现复杂。
  • 线程间通信只需要通过定义全局变量即可,各线程都能共享。

进程比线程稳定:

  • 多进程间,有各自独立的数据段,一个进程的崩溃不会影响到其他进程。
  • 多线程间数据共享,一个线程的崩溃往往会影响其他线程。

表格对比

对比点 进程 线程
定义 进程时运行中的程序,是最小的资源分配单位 线程是进程执行的实体,是最小的执行单位
资源占用 占用资源多 占用资源较少
内存共享 数据不共享,遵循读时共享、写时复制原则 大部分数据共享,只有私有的栈区不共享
通信 依赖IPC通信方式,机制复杂 可直接通过全局变量通信,实现简单
上下文切换耗时 耗时长 耗时短,更轻量
稳定性 进程崩溃不会影响另外进程 线程崩溃可能导致他线程也崩溃

二、多进程和多线程的选择

  • 需要频繁创建销毁的优先用线程
  • 需要进行大量计算的优先使用线程
  • 可能要扩展到多机分布的用进程,多核分布的用线程

三、参考文档

Difference between Process and Thread

编程思想之多线程与多进程系列

多线程还是多进程的选择及区别

本文共执行60次查询,耗时0.359秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: