一种配置中心监听的线程池核心参数运行配置方法及系统与流程

文档序号:35396508发布日期:2023-09-09 16:34阅读:25来源:国知局
一种配置中心监听的线程池核心参数运行配置方法及系统与流程

本发明涉及多线程配置领域,具体而言,涉及一种配置中心监听的线程池核心参数运行配置方法及系统。


背景技术:

1、目前多线程编程普遍使用线程池,线程池作为池化思想的线程实现,可以减少创建和销毁线程所带来的功耗,但线程池里核心线程数的设置却是一大难题。线程池参数中有三个比较关键的参数,分别是corepoolsize(核心线程数)、maximumpoolsize(最大线程数)、workqueueszie(工作队列大小)。根据任务的类型可以区分为io密集型和cpu密集型,对于cpu密集型,一般经验是设置corepoolsize=cpu核数+1,对于io密集型需要根据具体的rt和流量来设置,没有普适的经验值。然而,一般情况多数是处理io密集型任务,当线程池参数不合理时会导致什么问题呢?下面列举几种可能出现的场景:

2、(1)最大线程数设置偏小,工作队列大小设置偏小时,导致服务接口大量抛出rejectedexecutionexception。

3、(2)最大线程数设置偏小,工作队列大小设置过大时,任务堆积过度,接口响应时长变长。

4、(3)最大线程数设置过大,线程调度开销增大时,处理速度反而下降。

5、(4)核心线程数设置过小,流量突增时需要先创建线程,导致响应时长过大。

6、(5)核心线程数设置过大,空闲线程太多,占用系统资源。

7、在开发阶段无法确定这个功能设置多少线程合适,只能先根据理论设置一个相对合理线程数,然后慢慢进行修改调试。由于线程池创建时一般是静态的,在应用启动的时候各个核心参数已经固定了,线程池参数不可动态调节,就没办法根据实际情况实时调整处理速度,只能修改代码重新发布应用,这样做在调试阶段无疑耗费了很大成本。同样,在上线初期也无法确定最合适的线程数,而生产应用一旦发布,线程池就已经固定了。因此,目前需要一种能够在运行时动态调整线程池核心参数的方法。


技术实现思路

1、本发明的目的在于提供一种配置中心监听的线程池核心参数运行配置方法,其能够在运行时实现线程池核心参数的动态调整。

2、本发明的另一目的在于提供一种配置中心监听的线程池核心参数运行配置系统,其能够在运行时实现线程池核心参数的动态调整。

3、本发明的实施例是这样实现的:

4、第一方面,本申请实施例提供一种配置中心监听的线程池核心参数运行配置方法,其包括如下步骤,s1、新增一个阿波罗配置,用于配置某个线程池的核心参数;s2、新增一个单独的阿波罗监听类,注册监听器,用于监听这个阿波罗配置的变化;s3、根据线程运行情况,在阿波罗管理平台修改该线程池的阿波罗配置;s4、监听类如果监听到阿波罗配置改变,则调用线程池自带的运行时设置核心线程数和最大线程数方法。

5、在本发明的一些实施例中,上述步骤s2中具体包括如下步骤,实现commandlinerunner接口,自定义一个任务类,交由spring容器管理对象;然后在任务类中使用@apolloconfig注解注入一个config对象,再使用注入的上述config对象中的addchangelistener()方法添加一个事件监听器。

6、在本发明的一些实施例中,上述步骤s2中,默认注入的上述config对象是命名空间为application的配置对象,其中上述命名空间为可配置的。

7、在本发明的一些实施例中,上述步骤s4中具体包括如下步骤,threadpoolexecutor在运行时设置核心线程数和最大线程数提供threadpoolexecutor.setcorepoolsize()和threadpoolexecutor.setmaximumpoolsize()两个方法。

8、在本发明的一些实施例中,上述setcorepoolsize方法的执行流程包括,首先覆盖之前构造函数设置的corepoolsize,然后如果新的值比原始值要小,当多余的工作线程下次变成空闲状态时会被中断并销毁,如果新的值比原来的值要大且工作队列不为空,则会创建新的工作线程。

9、在本发明的一些实施例中,上述setmaximumpoolsize方法执行流程包括,首先覆盖之前构造函数设置的maximumpoolsize,然后如果新的值比原来的值要小,当多余的工作线程下次变成空闲状态的时候会被中断并销毁。

10、第二方面,本申请实施例提供一种配置中心监听的线程池核心参数运行配置系统,其包括,阿波罗配置模块:新增一个阿波罗配置,用于配置某个线程池的核心参数;监听器注册模块:新增一个单独的阿波罗监听类,注册监听器,用于监听这个阿波罗配置的变化;线程运行配置模块:根据线程运行情况,在阿波罗管理平台修改该线程池的阿波罗配置;线程池调用模块:监听类如果监听到阿波罗配置改变,则调用线程池自带的运行时设置核心线程数和最大线程数方法。

11、相对于现有技术,本发明的实施例至少具有如下优点或有益效果:

12、第一方面,本申请实施例提供一种配置中心监听的线程池核心参数运行配置方法,其包括如下步骤,s1、新增一个阿波罗配置,用于配置某个线程池的核心参数;s2、新增一个单独的阿波罗监听类,注册监听器,用于监听这个阿波罗配置的变化;s3、根据线程运行情况,在阿波罗管理平台修改该线程池的阿波罗配置;s4、监听类如果监听到阿波罗配置改变,则调用线程池自带的运行时设置核心线程数和最大线程数方法。

13、第二方面,本申请实施例提供一种配置中心监听的线程池核心参数运行配置系统,其包括,阿波罗配置模块:新增一个阿波罗配置,用于配置某个线程池的核心参数;监听器注册模块:新增一个单独的阿波罗监听类,注册监听器,用于监听这个阿波罗配置的变化;线程运行配置模块:根据线程运行情况,在阿波罗管理平台修改该线程池的阿波罗配置;线程池调用模块:监听类如果监听到阿波罗配置改变,则调用线程池自带的运行时设置核心线程数和最大线程数方法。

14、本申请基于配置中心监听的线程池核心线程数进行动态配置,适用于开发阶段线程调试和线上线程调整场景。本申请在开发阶段,极大方便了线程池参数的调试,节省了大量开发成本;本申请在生产阶段,能够根据线上实际qps等运行情况,动态调整线程池参数,以达到最合适的运行线程数,节约了系统资源,还提高了运行速度。其中,阿波罗(apollo)是一款可靠的分布式配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限和流程治理等特性。



技术特征:

1.一种配置中心监听的线程池核心参数运行配置方法,其特征在于,包括如下步骤,

2.如权利要求1所述的一种配置中心监听的线程池核心参数运行配置方法,步骤s2中具体包括如下步骤,实现commandlinerunner接口,自定义一个任务类,交由spring容器管理对象;然后在任务类中使用@apolloconfig注解注入一个config对象,再使用注入的所述config对象中的addchangelistener()方法添加一个事件监听器。

3.如权利要求2所述的一种配置中心监听的线程池核心参数运行配置方法,步骤s2中,默认注入的所述config对象是命名空间为application的配置对象,其中所述命名空间为可配置的。

4.如权利要求1所述的一种配置中心监听的线程池核心参数运行配置方法,步骤s4中具体包括如下步骤,threadpoolexecutor在运行时设置核心线程数和最大线程数提供threadpoolexecutor.setcorepoolsize()和threadpoolexecutor.setmaximumpoolsize()两个方法。

5.如权利要求4所述的一种配置中心监听的线程池核心参数运行配置方法,setcorepoolsize方法的执行流程包括,首先覆盖之前构造函数设置的corepoolsize,然后如果新的值比原始值要小,当多余的工作线程下次变成空闲状态时会被中断并销毁,如果新的值比原来的值要大且工作队列不为空,则会创建新的工作线程。

6.如权利要求4所述的一种配置中心监听的线程池核心参数运行配置方法,setmaximumpoolsize方法执行流程包括,首先覆盖之前构造函数设置的maximumpoolsize,然后如果新的值比原来的值要小,当多余的工作线程下次变成空闲状态的时候会被中断并销毁。

7.一种配置中心监听的线程池核心参数运行配置系统,其特征在于,包括,


技术总结
本发明提出了一种配置中心监听的线程池核心参数运行配置方法及系统,涉及多线程配置领域。一种配置中心监听的线程池核心参数运行配置方法,其包括如下步骤,新增一个阿波罗配置,用于配置某个线程池的核心参数;新增一个单独的阿波罗监听类,注册监听器,用于监听这个阿波罗配置的变化;根据线程运行情况,在阿波罗管理平台修改该线程池的阿波罗配置;监听类如果监听到阿波罗配置改变,则调用线程池自带的运行时设置核心线程数和最大线程数方法。此外本发明还提出了一种配置中心监听的线程池核心参数运行配置系统,其基于配置中心监听的线程池核心参数运行配置方法实现。本发明能够在运行时实现线程池核心参数的动态调整。

技术研发人员:袁楷航
受保护的技术使用者:天翼电子商务有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1