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


    1各自特色

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

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


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

    对比项

    多进程

    多线程

    结论

    数据共享

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

    数据是共享的,同步复杂

    各有优势

    内存、cpu

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

    占用内存少,切换简单

    线程占优

    创建、销毁和切换

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

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

    线程占优

    编程、调试

    编程简单、调试简单

    编程复杂、调试复杂

    进程占优

    可靠性

    进程间相互独立,不影响

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

    进程占优

    分布式

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

    适用于多核心分布式

    进程占优


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

    2 如何选择

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


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

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


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

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


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

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

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

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


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

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

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

    3 进程池或线程池

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


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


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

  • 相关阅读:
    4/19学习总结
    人月神话读后感8
    4/18学习总结:PullToRefresh
    构建之法阅读笔记03
    构建之法阅读笔记02
    个人总结
    大二下学期课程总结
    学习进度16
    学习进度15
    课堂测试-找英语单词最长链
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5080316.html
Copyright © 2020-2023  润新知