经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
近期业务需要所引发的性能优化问题,浅谈线程池性能优化
来源:cnblogs  作者:RoJeoL  时间:2018/11/6 10:22:08  对本文有异议

 

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

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倍

 

 

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

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

如有不对之处,望指正啦

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号