近期业务需要所引发的性能优化问题,浅谈线程池…
2018-11-06 06:51:23来源:博客园 阅读 ()
线程池对于性能优化无处不在
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倍
至此,楼主要说的线程池处理海量数据,或者高并发时简单应用告一段落。。。。。
类似于这种线程池工具类,论坛有很多,大家可以参考~~~~
如有不对之处,望指正啦
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java类实例化原理
- 从聚合支付业务的设计来聊聊策略模式 2020-06-03
- 架构师需要懂的环境配置标准化 2020-05-24
- Java窗体加载时不显示组件或需要重置窗口 2020-05-21
- 还搞不定Java多线程和并发编程面试题?你可能需要这一份书单 2020-05-18
- 还搞不定Java多线程和并发编程面试题?你可能需要这一份书单 2020-05-15
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash