多进程与多线程的选择(转)

1各自特色

关于线程和进程,我们上大学时的教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。当然了,这句话应付考试已经够了,但是在工作中,光知道这句话是一点用都没有的。

我们在做程序设计的时候,会纠结是用多线程还是用多进程,我可以告诉你,这个问题没有标准答案,合理即正确。根据实际的项目需求,哪个合适选择哪一个。


下面对比一下多进程和多线程的区别

对比项

多进程

多线程

结论

数据共享

数据共享复杂,需要使用IPC,同步简单

数据是共享的,同步复杂

各有优势

内存、cpu

占用内存多,切换耗费资源多

占用内存少,切换简单

线程占优

创建、销毁和切换

创建、销毁和切换耗费资源多

创建、销毁和切换耗费资源少

线程占优

编程、调试

编程简单、调试简单

编程复杂、调试复杂

进程占优

可靠性

进程间相互独立,不影响

一个线程挂掉导致整个进程退出

进程占优

分布式

适用于多核心、多机分布式;如果一台机器不够,扩展到多机比较简单

适用于多核心分布式

进程占优


从上表的比较结果来看,多进程和多线程是鱼和熊掌的关系。

2 如何选择

通过上面的比较,想必是选择多进程还是多线程,大家心里已经有些底了。


  • 需要频繁创建、销毁的优先使用线程

这种应用以web服务器为多,新的连接创建一个线程,当处理完毕以后释放线程,如果是进程的话,消耗还是比较大的。当然了,Apache使用的就是多进程,这里不是不能用多进程,而是优先使用多线程。


  • 需要进行大量计算的,优先使用线程

大量计算肯定会占用大量的CPU时间,这时候使用多线程减少切换的代价是比较合适的。


  • 强相关的处理用线程,弱相关的处理用进程

强相关,可以理解为业务联系紧密的处理,那么弱相关就是业务联系不紧密的处理了。

弱相关,比如消息的收发和消息的处理,业务联系不紧密,可以使用多进程;强相关,比如消息处理中包含了消息解码和消息处理,这时候使用多线程较好。

当然了,这不是一成不变的方式,也可以根据实际情况进行调整。


  • 可能会用到多机分布式,优先使用进程

  • 两种方式都能满足需求,优先使用自己最熟悉的方式

当使用多进程和多线程都能够满足需求的时候,使用自己最拿手的方式。当然了,实际的开发中,多进程和多线程方式是并存的,两种方式并不是对立的。适合及合理,合理即正确。

3 进程池或线程池

使用进程池或线程池,是为了降低程序在运行时创建或销毁进程或线程消耗的资源,这种做法在计算机配置较低的年代有着很好的效果,可以提高程序的运行效率。


但是,预先生成子进程或子线程比用时创建子进程或子线程要复杂的多,不仅要对池中的进程/线程数量进行管理,还要解决多进程/多线程抢资源的问题,而且,在目前计算机的配置下,进程池或线程池在效率上不见得比用时创建进程或线程有优势。


因此,使用进程池或线程池的技术,不仅复杂,从现阶段来看也无优势,在新的应用中,可以放心大胆的用时创建进程或线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值