为了账号安全,请及时绑定邮箱和手机立即绑定

近期业务需要所引发的性能优化问题,浅谈线程池性能优化

标签:
Java

线程池对于性能优化无处不在

1.楼主在平时产品开发过程中所遇到的性能问题,特别是最近特别流行的微服务架构、

web - java - 底层数据源(python亦或者opensatck),对于这种前后台分离的场景

无时无刻会存在对于业务场景需要对同一数据源进行百次,千次的重复调用过程、

性能方面就会出现接口延迟,过慢,超时等情况

下面就楼主最近遇到的一个业务场景加以举例说明:做云计算相关的想必都是知道,我们在为客户提供单板的过程中(也就是物理机);会对众多的单板进行管理,这里我们就引进主机组;

主机组就是用来管理单板的存在,往往在使用过程中,会存在资源不足的情况,我们此时就需要将资源不足的单板迁移到别的主机组上,从而做到虚拟机资源的合理利用,对此在迁移过程

中可能能会出现成败上前的主机批量操作,对此串行显然已经不能满足我们的诉求了,此时就要引进线程池

2.线程池在该高并发场景下的使用来提高性能

首先说下线程池中几个重要的类

   1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

      2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:
        1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
        2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。

      3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 。

      4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer

楼主以newFixedThreadPool的方式为主简单测试下效果:

首先是传统for循环串行时,

 

处理10000条数据,每次业务处理假设消耗10ms,总用时107857ms

 

 

下面使用线程池为size为100的,处理10000条数据总用时1100ms,有没有很神奇,效率接近10倍

 

 

 至此,楼主要说的线程池处理海量数据,或者高并发时简单应用告一段落。。。。。

类似于这种线程池工具类,论坛有很多,大家可以参考~~~~

如有不对之处,望指正啦

原文出处:https://www.cnblogs.com/flovesh/p/9911898.html  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消