码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-11-05 22:25:44      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:nsa   ade   技术   批量   说明   image   问题   处理   时间   

 

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

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倍

技术分享图片

 

技术分享图片

 

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

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

如有不对之处,望指正啦

 

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

标签:nsa   ade   技术   批量   说明   image   问题   处理   时间   

原文地址:https://www.cnblogs.com/flovesh/p/9911898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!