博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多进程与多线程的选择(转)
阅读量:5908 次
发布时间:2019-06-19

本文共 1216 字,大约阅读时间需要 4 分钟。

1各自特色

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

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

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

对比项

多进程

多线程

结论

数据共享

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

数据是共享的,同步复杂

各有优势

内存、cpu

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

占用内存少,切换简单

线程占优

创建、销毁和切换

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

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

线程占优

编程、调试

编程简单、调试简单

编程复杂、调试复杂

进程占优

可靠性

进程间相互独立,不影响

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

进程占优

分布式

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

适用于多核心分布式

进程占优

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

2 如何选择

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

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

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

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

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

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

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

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

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

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

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

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

3 进程池或线程池

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

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

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

转载地址:http://vsvpx.baihongyu.com/

你可能感兴趣的文章
虚拟机linux上网问题
查看>>
线程基础篇Looper
查看>>
XMLHttpRequest - 原始AJAX初步
查看>>
winform程序读取和改写配置文件App.config元素的值
查看>>
深度学习-笨人战胜聪明人的利器
查看>>
C# Winform DataGrid 绑定List<> Or ObservableCollection<> 类型无法自动刷新问题
查看>>
laravel/lumen 单元测试
查看>>
11-02SQLserver基础--字符串函数
查看>>
同一件事(watch+scss) gulp和grunt速度的对比
查看>>
csu2161: 漫漫上学路(Hash+最短路)
查看>>
在Notepad++中为Python配置编译环境
查看>>
重复引用错误:duplicate symbols for architecture x86_64
查看>>
restricted 模式及其 使用
查看>>
MFC小程序
查看>>
转:Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB
查看>>
计算机图形学 课设
查看>>
ucenter1.5通讯过程分析(转载)
查看>>
js和html5实现画板
查看>>
也许,这样理解HTTPS更容易
查看>>
浏览器中可以访问,但是git命令、go get命令使用时却无法连接
查看>>