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

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

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

时间: 2024-11-03 05:33:46

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

转:浅谈CSS在前端优化中一些值得注意的关键点

前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加载时间,但其实性能不仅仅是指加载时间,还包括浏览器性能.网络性能.开发效率.在Web前端开发中,性能是一个非常重要的需要考虑的点.本文将介绍一些开发原则和性能准则,这些都是提高Web前端性能的基础. 1. 开发原则 1.1 编写符合当代浏览器性能的代码如果想提高前端性能,就必须理解浏览器的工作原理,

【浅谈DOM事件的优化】

浅谈DOM事件的优化 在 JavaScript程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚轮事件为 DOMMouseScroll). 浏览器为了确保这些事件能够及时响应,触发的频率会比较高,具体的触发频率各浏览器虽然有出入,但出入不大.很多时候在需要注重性能的场景下使用这些事件会想各种办法对事件的触发频率进行优化,下面说说我的一些优化方法. mousemove 在拖拽

浅谈tomcat中间件的优化【转】

今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配置对于生产环境来说是相当不够滴,特别对于内存以及线程的配置方面都很有可能成为日后性能的瓶颈. 接下来咱们就聊聊tomcat的优化,从内存以及线程两个方面来谈: 1.内存方面 tomcat的内存优化操作起来就比较简单了 如果是linux环境的话设置如下: 修改TOMCAT_HOME/bin/catal

浅谈代码重构与优化

浅谈代码重构与优化 前几天看到有一篇不错的文章减少该死的if-else嵌套,觉得写得很不错,整理了一下后准备在团队内部简单分享一下. 写在前面 大家在接手项目的时候,应该有遇到过下面这种结构的代码 if (true) { ..... if (true) { if (true) { .... if (true) { if (true) { ...... } } // do something } // do something if (true) { ......... } } // do som

BizTalk开发系列(三十二)浅谈BizTalk主机性能优化

很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率,从而约束了BizTalk的效率.之前做了一个200万条CSV数据通过 BizTalk传到数据库的程序.在不改变程序的情况下对主机性能做了一下简单优化,处理效率发生了成倍的增长. 程序逻辑 先简单的介绍一下程序的处理逻辑,CSV原文件大概有200多万条数据,文件大小50多M.每条只有两个字段总长度大概

运维角度浅谈:MySQL数据库优化

日志君导读: 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 作者:zhenliang8,本文转自51CTO博客,点击原文阅读查看网页版文章. 本博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很

NGINX引入线程池 性能提升9倍

1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为此,NGINX工作在非阻塞的socket模式下,并使用了epoll 和 kqueue这样有效的方法. 因为满负载进程的数量很少(通常每核CPU只有一个)而且恒定,所以任务切换只消耗很少的内存,而且不会浪费CPU周期.通过NGINX本身的实例,这种方法的优点已经为众人所知.NGINX可以非常好地处理百

Nginx 学习笔记(六)引入线程池 性能提升9倍

原文地址:https://www.cnblogs.com/shitoufengkuang/p/4910333.html 一.前言 1.Nignx版本:1.7.11 以上 2.NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求. 3.NGINX工作在非阻塞的socket模式下,并使用了epoll 和 kqueue这样有效的方法. 4.NGINX可以非常好地处理百万级规模的并发请求

线程池技术优化

线程池: 线程池是一种多线程处理形式,初始创建多个线程,初始线程处于wait状态.处理过程中将任务添加到队列中,按照队列顺序依次处理,此时线程处于work状态自动启动这些任务.线程任务处理完后继续处理队列中待执行任务,最后完成所有任务放回至线程池统一销毁.线程池线程都是后台线程,适用于连续产生大量并发任务的场合.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中. 线程池(英语:thread pool):一种线程使用模式.线程过多会带来调度开销,进而影响缓存局部性和整体性能.而