转:https://www.cnblogs.com/Yogurshine/p/3640206.html

在Linux下编程多用多进程编程少用多线程编程

IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

如果是UNIX/linux环境,采用多线程没必要。

多线程比多进程性能高?误导!

应该说,多线程比多进程成本低,但性能更低

在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。

多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

====================================================================================================

多线程的优点:

无需跨进程边界; 程序逻辑和控制方式简单; 所有线程可以直接共享内存和变量等; 线程方式消耗的总资源比进程方式好; 多线程缺点:

每个线程与主程序共用地址空间,受限于2GB地址空间; 线程之间的同步和加锁控制比较麻烦; 一个线程的崩溃可能影响到整个程序的稳定性; 到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数; 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

多进程优点:

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

逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大; 最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

---------------------------------------------------------

进程的优点:

1)顺序程序的特点:具有封闭性和可再现性;

2)程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。 进程的缺点:

操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享,通讯也比较麻烦。

线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

线程的优点:

1)它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能会有较大的区别;

2)线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;

3)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;

4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 线程的缺点: 1.调度时, 要保存线程状态,频繁调度, 需要占用大量的机时; 2.程序设计上容易出错(线程同步问题)。

多线程与多进程之间比较相关推荐

  1. python多线程,多进程,线程池,进程池

    https://blog.csdn.net/somezz/article/details/80963760 python 多线程 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单 ...

  2. Python多线程、多进程最全整理

    线程与进程的区别 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.关于多进程和多线程,教科书上最经典的一句话是"进程是资源分配的最小单位,线程 ...

  3. 太好了, 终于梳理清楚Python多线程与多进程

    在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白.今天准备花一些时间,把里面的细节尽可能的梳理清楚. 线程与进程的区别 进程(process)和线程(thread ...

  4. 一篇文章梳理清楚 Python 多线程与多进程

    在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白.今天准备花一些时间,把里面的细节尽可能的梳理清楚. 线程与进程的区别 进程(process)和线程(thread ...

  5. 太好了!终于梳理清楚Python多线程与多进程!

    作者丨钱魏Way 来源 https://www.biaodianfu.com/python-multi-thread-and-multi-process.html 大家好,我是菜鸟哥. 在学习Pyth ...

  6. python多线程和多进程的使用_python多线程与多进程

    python多线程与多进程 python多线程 python中提供两个标准库thread和threading用于对线程的支持,python3中已放弃对前者的支持,后者是一种更高层次封装的线程库,接下来 ...

  7. python 多进程_说说Python多线程与多进程的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  8. gj11 多线程、多进程和线程池编程

    11.1 python中的GIL # coding=utf-8 # gil global interpreter lock (cpython) # python中一个线程对应于c语言中的一个线程 # ...

  9. 多线程还是多进程的选择

    我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受). 对比维度 多进程 多线程 总结 数据共享.同步 数据共享复杂, ...

  10. 多线程还是多进程的区别

    多进程之间不共享数据,程序上下文区分开. 多线程之间共享数据,在数据处理上要谨慎 1.定义 程序: 只是一组指令的有序集合,是计算机硬盘上的一些文件,是"死的" 进程:具有一定独立 ...

最新文章

  1. ContentProvider学习笔记
  2. ubuntu启动,而且找不到win10启动项!
  3. 将完整的XP(非PE)安装到U盘
  4. How to: Display a Gradient Fill
  5. flask ajax 笔记
  6. PPT演示力~思维导图
  7. python每个字符后添加空格_python实现指定字符串补全空格的方法
  8. this 的4种绑定机制
  9. linux c curl 乱码,curl获取结果乱码的解决方法之CURLOPT_ENCODING(curl/Post请求)
  10. 为什么有的安卓手机会越用越卡?
  11. Java中线程的创建有两种方式
  12. C# Parse和Convert的区别分析
  13. VSS2005下载地址 VS6.0d下载地址(软件+我的教程)
  14. 利用SPSS随机数轻松实现随机分组
  15. 图神经网络 GNN GAT GCN(一)
  16. android checkbox 文字和图标间距,CheckBox选择框和文字设置间距
  17. LinuxGit Accumulation
  18. 诚之和:波司登羽绒服都上万了 “土味羽绒服”高溢价引争议
  19. video 标签属性
  20. 上班族致富五大途径解密

热门文章

  1. vue2使用脚手架配置prettier报错:‘prettier/prettier‘: context.getPhysicalFilename is not a function
  2. vue的零碎知识点-黑马后台项目整理
  3. useradd/adduser 添加用户
  4. usc计算机博士游戏专业,USC工科博士专业排名,必然得仔细的看
  5. mysql php 类 缓存_记录一个实用的PHP缓存类
  6. java opencv gamma_OpenCV函数cvAddWeighted调整alpha和gamma值 | 学步园
  7. 计算机应用与维修的视频,开关电源原理与维修视频全集(1-30集)
  8. 智能卡检测控制系统检测m1这么操作_多联机制冷剂灌注操作方法
  9. jni回调android子线程,如何在android的jni线程中实现回调
  10. 技校计算机程序设计,如何编写技工学校计算机程序设计课程校本教材