首页
学习
活动
专区
圈层
工具
发布

工作多年,关于线程数存在的误区

四、为什么要多线程

按照上面的说法,有线程的上下文切换耗时,那么为什么需要多线程呢?小伙伴会不会感觉很乱,怎么回事?

小伙伴想想在我们真实业务中,我们是什么流程?

上图的流程:

1、先发起网络请求

2、web服务器解析请求

3、请求后端的数据库获取数据

4、获取数据后,进行处理

5、把处理结果放回给用户

这个是我们处理业务的时候,常规的请求流程;我们看一下整个过程涉及到什么计算机处理。

1、网络请求----->网络IO

2、解析请求----->CPU

3、请求数据库----->网络IO

4、mysql查询数据----->磁盘IO

5、mysql返回数据----->网络IO

6、数据处理----->CPU

7、返回数据给用户----->网络IO

小伙伴们是不是感觉又不乱了,在真实业务中我们不单单会涉及cpu计算,还有网络IO和磁盘IO处理,这些处理是非常耗时的。如果一个线程整个流程是上图的流程,真正涉及到CPU的只有2个节点,其他的节点都是IO处理,那么线程在做IO处理的时候,CPU就空闲出来了,CPU的利用率就不高

小伙伴们现在知道多线程的用处了吧,对,就是为了提升CPU利用率

七、基础常规标准

那我们小伙伴们会问,因为很多业务集中到一个线程池中,不像上面的案例比较简单,事实上业务太多,怎么设置呢?这个就是要去压力测试去调整。不过我们的前辈已经帮我们总结了一个基础的值(最终还是要看运行情况自行调整)

CPU密集型:操作内存处理的业务,一般线程数设置为:CPU核数 + 1 或者 CPU核数*2。核数为4的话,一般设置 5 或 8

IO密集型:文件操作,网络操作,数据库操作,一般线程设置为:cpu核数 / (1-0.9),核数为4的话,一般设置 40

八、总结

今天介绍了线程数大小的设置,一些小伙伴们的误区。讲到这里我们小伙伴们是不是对线程有了更新的理解,不像之前那么粗暴,应该要去分析为什么这么慢,系统的瓶颈出现在什么地方,减少瓶颈的耗时。

老顾可以推荐小伙伴们再去看一下redis、nginx;为什么他们会那么快呢?其实和这篇文章的知识点有共同的地方。谢谢阅读!!!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oaz2HeXSzePpN22MGsONZy_A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券