来源:http://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+轮询方式来解决问题……

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


进程的优点:

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

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

进程的缺点:

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

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


线程的优点:

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

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

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

  • 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

线程的缺点: 

  • 调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;

  • 程序设计上容易出错(线程同步问题)。

想要获取学习实战、高并发、架构 、笔试面试资料请扫码咨询+薇薇微信

多线程处理同一批数据_多进程和多线程的优缺点相关推荐

  1. 多进程和多线程的区别是什么?多进程和多线程的优缺点分析

    多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成.多进程的数据是分开的.共享复杂,需要用IPC:但同步简单.多线程共享进程数据,共享简单:但同步复杂. 多进程,Wind ...

  2. php扩展多线程和多进程,PHP 多进程和多线程的优缺点

    PHP 多进程和多线程的优缺点 多进程 1.使用多进程, 子进程结束以后, 内核会负责回收资源 2.使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3.一个常 ...

  3. 过滤一批数据_手把手教你学numpy,从此数据处理不再慌【三】

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是numpy专题的第三篇,我们来聊聊numpy当中的索引. 上篇的末尾其实我们简单地提到了索引,但是没有过多深入.没有过多深入的原因也很 ...

  4. 多进程和多线程的优缺点

    在Linux下编程多用多进程编程少用多线程编程. IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多.进出最快的锁(windows2k的 critical ...

  5. 多线程处理同一批数据_C#中多线程的那点事-多线程的代价

    买椟还珠 上一篇<C#中多线程的那点事儿-Thread入门>,我们掰扯了一下Thread的最基本用法. 我们说到,多线程,可以利用CPU的多个核心,并行执行,从而提升程序的效率. 有个聪明 ...

  6. python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...

    第一个选项 – 服务器进程 创建服务器进程.它是Multiprocessing包的一部分,允许并行访问数据结构.这样,每个进程都将直接访问数据结构,锁定其他进程. Server process A m ...

  7. 多线程分批量处理list数据_使用多线程处理输入的数据

    TensorFlow 的 Session 对象是支持多线程的,因此多个线程可以很方便地在同一个会话下对同一个队列并行地执行操作.Python 本身也提供了创建线程的threading.py,这个文件提 ...

  8. auto.js停止所有线程_使用多线程处理输入的数据

    TensorFlow 的 Session 对象是支持多线程的,因此多个线程可以很方便地在同一个会话下对同一个队列并行地执行操作.Python 本身也提供了创建线程的threading.py,这个文件提 ...

  9. 多进程和多线程的区别_关于多进程和多线程的那些事儿

    1. 引言 只有真正写过操作系统内核的人,比如大神Linus才能真正理解进程和线程的区别与联系,像我们学过操作系统课程的人都知道进程和线程的基本概念,但是仅仅是懂个皮毛而已.所以我也是纸上谈兵,根据理 ...

最新文章

  1. 分布式版本控制工具:git与Mercurial(zz)
  2. 关于SAP物料的历史库存
  3. android 手机号码去重,第135天:移动端开发经验总结
  4. 【Python】Python的判断、循环和各种表达式(长文系列第②篇)
  5. CSS中的a标签几个访问状态记录
  6. constructor of OfflineInterface.js
  7. 外设驱动库开发笔记5:AD7705系列ADC驱动
  8. VMware Workstation虚拟机窗口小,无法显示内部系统全部桌面
  9. 北航出品,CVPR 安全AI大赛第二名:梯度细化提高对抗传递性
  10. LeetCode962. 最大宽度坡
  11. 智慧工地解决方案施工升降机智能监控系统
  12. GitHub如何生成密钥
  13. Python入门50个小程序
  14. dismiss和remove_为什么不会在onDestroy或onPause中解雇Dialog,removeDialog或dialog.dismiss工作?...
  15. Verilog HDL 编程语言接口
  16. C语言实现创建游戏角色(包含文件写入)
  17. JPBC库(基于配对的密码学)入门和避坑指南
  18. java 鼠标变成手型_当鼠标放在按钮上时让指针变为手型
  19. 金三银四,中高级测试面经,第二波来袭!
  20. bmp文件数字水印c语言代码,图像数字水印+matlab程序文件.doc

热门文章

  1. Win10桌面右键响应非常慢怎么办?
  2. 2016.8.1今天是建军节
  3. ASP.NET MVC 3 常用
  4. CSS3菜单栏透明兼容问题
  5. ylb:表的结构的修改和基本约束
  6. jvm在不同系统中的最大内存空间地址
  7. 使用泛型创建只读集合
  8. 从U盘自动安装centos5.3到服务器
  9. 重磅开源!推荐一个以最优惠的方式购买极客时间课程的开源项目!
  10. Minio的容量算法及实际存储空间计算公式