当前位置:   article > 正文

多进程与多线程异同及适用场景_操作系统的多进程和多线程的区别,什么场景使用多进程,什么场景使用多线程

操作系统的多进程和多线程的区别,什么场景使用多进程,什么场景使用多线程

“进程——资源分配的最小单位,线程——程序执行的最小单位”

举个例子

1.单进程单线程:一个人在一张桌子上吃饭。
2.单进程多线程:多个人在同一张桌子上一起吃饭。
3.多进程单线程:多个人每个人在自己的桌子上吃饭。

  • 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜(共享资源),一个人刚伸出筷子,结果发现已经有另一人在夹菜了,此时他就要等另一个人夹完菜之后才可以夹菜,也就是说在同一张桌子上有多个人吃饭就不可避免会发生争抢。

  • 多进程每个人都有自己的一道菜,就不会同时争抢一道菜。但是另一个问题随之而来。每个人开一张桌子消耗就会较大。开桌子(创建进程)的消耗也因饭店(操作系统)的不同有所区别: 对于Windows来说,开桌子的开销是很大的,因此Windows鼓励大家在一张桌子上吃饭。Windows多线程学习的重点是面对资源争抢与同步方面的问题。对于Linux来说,开桌子的开销很小,因此Linux鼓励大家尽量每个人都开一张自己的桌子吃饭。这带来新的问题,坐在两张不同的桌子上,说话不方便,因此Linux下的学习重点是进程间通讯的方式。(PS:两者的开销相差一百倍左右)

多线程多进程优缺点对比

多进程优点

  1. 每个进程相互独立,不影响主程序的稳定性,子进程崩溃没有关系。
  2. 通过增加CPU,就可以容易扩充性能。
  3. 可以尽量减少线程加锁/解锁的影响,极大提高性能。就算是线程运行的模块算法效率低也没有关系。
  4. 每个子进程都有2GB地址空间和资源,总体能够达到性能上限非常高。

多进程的缺点

  1. 逻辑控制复杂,需要个主程序交互。
  2. 需要跨越边界,如果有大数据量传送就不太好,适合小数据量传送、密集运算。多进程调度开销较大。

多线程的优点

  1. 无需跨越进程边界。
  2. 程序逻辑和控制方式简单。
  3. 所有线程可以直接共享内存和变量等。
  4. 线程方式消耗的总资源比进程方式少。

多线程的缺点

  1. 每个线程与主程序共用地址空间,受限于2GB地址空间。
  2. 线程之间同步与加锁控制比较麻烦。
  3. 一个线程的崩溃可能影响到整个程序的稳定性。
  4. 到达一定的线程数后,即是再增加CPU也不能提高性能。
  5. 线程能够提高总的性能是有限的,而且线程多了之后本身的调度也是一个麻烦事儿,需要消耗较多的CPU资源。

多进程和多线程的对比

我们按照多个不同的维度,来看看多进程和多线程的对比(注:都是相对的,不是说一个好得不得了,另一个差的无法忍受)

维度多进程多线程总结
数据共享同步共享复杂需要IPC;同步简单共享简单;同步复杂各有优势
内存、CPU占用内存多,切换复杂,CPU利用率低占用内存极少,切换简单,CPU利用率高线程占优
创建、销毁和切换创建销毁、切换复杂、速度慢创建销毁、切换简单、速度快线程占优
编程调试编程调试简单编程调试复杂进程占优
可靠性进程间不会相互影响一个线程挂掉将导致整个进程挂掉进程占优
分布式适用于多核、多级分布;如果一台机器不够,扩展到多台机器比较简单适用于多核分布进程占优

应用场景

  1. 需要频繁创建销毁的优先使用线程。例如:web服务器,来一个建立一个线程,断了就销毁线程。要是用进程,创建和校会的代价是很难承受的。
  2. 需要进行大量的计算优先使用线程。所谓大计算量,就是消耗CPU很多,切换频繁,这种情况用线程最合适。例如:图像处理,算法处理。
  3. 强相关处理用线程,弱相关处理用进程。一般的server需要完成的任务如下:消息接发和消息处理。接发消息和消息处理就是弱相关任务,而消息处理里面又能分为消息解码,业务处理,这两个任务相对来说相关性强很多,因此,消息接发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。
  4. 可能扩展到多机分布的用多进程,多核分布用多线程。
  5. 都满足需求的情况下,哪种方式拿手用哪种方式。

参考资料

  1. 多线程和多进程的区别与联系
  2. 多进程和多线程的优缺点分析
  3. 面试总结,多进程和多线程的区别
  4. 多进程多线程适用场景
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/151372
推荐阅读
相关标签
  

闽ICP备14008679号