抖音资讯

douyinzx

多线程应用场景有哪些(多线程多进程使用场景讲解)

iseeyu2年前 (2024-04-30)抖音资讯131

多线程使用的主要目的在于:

1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说,可能就是一个请求一个线程。或多个请求一个线程。如果是单线程,那同时只能处理一个用户的请求。

2、伸缩性:也就是说,你可以通过增加CPU核数来提升性能。如果是单线程,那程序执行到死也就利用了单核,肯定没办法通过增加CPU核数来提升性能。

鉴于你是做WEB的,第1点可能你几乎不涉及。那这里我就讲第二点吧。

--举个简单的例子:

假设有个请求,这个请求服务端的处理需要执行3个很缓慢的IO操作(比如数据库查询或文件查询),那么正常的顺序可能是(括号里面代表执行时间):

a、读取文件1 (10ms)

b、处理1的数据(1ms)

c、读取文件2 (10ms)

d、处理2的数据(1ms)

e、读取文件3 (10ms)

f、处理3的数据(1ms)

g、整合1、2、3的数据结果 (1ms)

单线程总共就需要34ms。

那如果你在这个请求内,把ab、cd、ef分别分给3个线程去做,就只需要12ms了。

所以多线程不是没怎么用,而是,你平常要善于发现一些可优化的点。然后评估方案是否应该使用。

假设还是上面那个相同的问题:但是每个步骤的执行时间不一样了。

a、读取文件1 (1ms)

b、处理1的数据(1ms)

c、读取文件2 (1ms)

d、处理2的数据(1ms)

e、读取文件3 (28ms)

f、处理3的数据(1ms)

g、整合1、2、3的数据结果 (1ms)

单线程总共就需要34ms。

如果还是按上面的划分方案(上面方案和木桶原理一样,耗时取决于最慢的那个线程的执行速度),在这个例子中是第三个线程,执行29ms。那么最后这个请求耗时是30ms。比起不用单线程,就节省了4ms。但是有可能线程调度切换也要花费个1、2ms。因此,这个方案显得优势就不明显了,还带来程序复杂度提升。不太值得。

那么现在优化的点,就不是第一个例子那样的任务分割多线程完成。而是优化文件3的读取速度。

可能是采用缓存和减少一些重复读取。

首先,假设有一种情况,所有用户都请求这个请求,那其实相当于所有用户都需要读取文件3。那你想想,100个人进行了这个请求,相当于你花在读取这个文件上的时间就是28×100=2800ms了。那么,如果你把文件缓存起来,那只要第一个用户的请求读取了,第二个用户不需要读取了,从内存取是很快速的,可能1ms都不到。

伪代码:

 

看起来好像还不错,建立一个文件名和文件数据的映射。如果读取一个map中已经存在的数据,那么就不不用读取文件了。

可是问题在于,Servlet是并发,上面会导致一个很严重的问题,死循环。因为,HashMap在并发修改的时候,可能是导致循环链表的构成!!!(具体你可以自行阅读HashMap源码)如果你没接触过多线程,可能到时候发现服务器没请求也巨卡,也不知道什么情况!

好的,那就用ConcurrentHashMap,正如他的名字一样,他是一个线程安全的HashMap,这样能轻松解决问题。

 

这样真的解决问题了吗,这样虽然只要有用户访问过文件a,那另一个用户想访问文件a,也会从fileName2Data中拿数据,然后也不会引起死循环。

可是,如果你觉得这样就已经完了,那你把多线程也想的太简单了,骚年!

你会发现,1000个用户首次访问同一个文件的时候,居然读取了1000次文件(这是最极端的,可能只有几百)。What the fuckin hell!!!

难道代码错了吗,难道我就这样过我的一生!

好好分析下。Servlet是多线程的,那么

 

上面注释的“偶然”,这是完全有可能的,因此,这样做还是有问题。

因此,可以自己简单的封装一个任务来处理。

 

以上所有代码都是直接在bbs打出来的,不保证可以直接运行。

多线程最多的场景:web服务器本身;各种专用服务器(如游戏服务器);

多线程的常见应用场景:

1、后台任务,例如:定时向大量(100w以上)的用户发送邮件;

2、异步处理,例如:发微博、记录日志等;

3、分布式计算

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/47928.html

相关文章

求创新,做首创!搜狗输入法:架起人与人高效沟通的桥梁

求创新,做首创!搜狗输入法:架起人与人高效沟通的桥梁

输入法是万物互联时代的重要入口,但受人类综合能力所限,我们与“万物”沟通的效率还远远没有发挥出设备的真实实力。常见的,我的手已经跃跃欲试但我的脑还没有想好聊些什么以增进新认识女孩的好感,以及提笔忘字在熟悉的诗句歌词“下一句是什么”,“上一句是什么”的尴尬中突然世界静止,这种人为的信息加载时间延迟,让...

ps金属质感文字怎么做(ps金属光泽效果的调整)

ps金属质感文字怎么做(ps金属光泽效果的调整)

今天给大家分享如何用PS制作金属流体字效果,跟着我的步骤你也能学会,记得点赞收藏+关注哦。 1.首先我们用PS新建一个空白文档,快捷键ctrl+n(新建),尺寸由自己决定,在其上方新建一个空白文档,选择文字工具,快捷键T,这里我输入PS,回车确定。   2....

哔哩哔哩B站UP主排名涨粉排行榜前30名-2022年8月

哔哩哔哩B站UP主排名涨粉排行榜前30名-2022年8月

哔哩哔哩B站全区UP主涨粉排行榜Top30榜单统计时间:2021.9.1来源:飞瓜数据B站版 飞瓜数据B站版-B站大数据分析平台注:本榜单来源于公开数据,不代表飞瓜B站平台观点更多不同分区的B站排行榜单信息可前往飞瓜数据B站(飞瓜数据B站版-B站大数据分析平台)查询~(B站...

ps如何让图片更加清晰(ps模糊图片秒转高清图技巧)

ps如何让图片更加清晰(ps模糊图片秒转高清图技巧)

第一步 打开PS插入图片,输入快捷键Ctrl+J复制一个图层,并把复制的图层右击转换为智能对象。     第二步 在第一图层执行【滤镜-其他-高反差保持滤镜】,会弹出调整窗口。高反差保留滤镜主要保留图像中颜色的交界处和明暗对...

整个网页截图快捷键ctrl加什么(电脑最简单的截图方法)

整个网页截图快捷键ctrl加什么(电脑最简单的截图方法)

在使用电脑办公时,会用到它的截图功能,常会联想到键盘Ctrl+什么键?但具体是按什么键,就忘了!         其实,win电脑的截图快捷操作是很多的,今天就来重点介绍一下,Ctrl+XX 组合截图快捷键。 &nb...

快手注销账号怎么弄(快手注销手机号绑定)

快手注销账号怎么弄(快手注销手机号绑定)

快手账号在得到直播权限之前如有违规记录,开通直播权限的概率就跌至基本为零了,这时候建议换一个号玩。换一个号玩也需要绑定手机号,一个手机号只能绑定一个快手号,而自己的手机号又绑定了原来的快手号,怎么办? 其实很简单,两个字,解绑!快手号一旦申请,是无法注销的,这个时候就需要解绑了。如何解绑手机...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片