一种线程池配置方法及装置与流程

文档序号:33370195发布日期:2023-03-08 01:57阅读:43来源:国知局
一种线程池配置方法及装置与流程

1.本技术涉及计算机技术领域,具体而言,涉及一种线程池配置方法及装置。


背景技术:

2.java线程池是一种基于池化思想管理线程的工具,线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。现有的线程池配置方法,通常需要配置很多线程池参数,并维护多个线程,等待监督管理者分配可并发执行的任务。然而,在实践中发现,该方法需要配置人员具有专业知识,需要配置和维护的数据较多,同时线程池执行的情况和任务类型相关性较大,不同类型的任务运行起来的情况差异非常大,从而导致线程池配置困难繁琐。可见,现有方法需要专业门槛高,线程池配置困难繁琐,线程池参数维护成本高。


技术实现要素:

3.本技术实施例的目的在于提供一种线程池配置方法及装置,能够实现动态配置线程池并自动维护工作线程,配置人员专业门槛低,从而降低了线程池的配置难度,降低了线程池参数维护成本。
4.本技术实施例第一方面提供了一种线程池配置方法,包括:
5.在线程池运行期,调用预先配置的方法动态配置线程数;
6.将所述线程数直接覆盖原始线程数;
7.根据所述线程数和原始线程数确定当前的工作线程执行策略;
8.根据所述工作线程执行策略对所述线程池的工作线程执行相应的配置操作。
9.在上述实现过程中,方法可以优先在线程池运行期,调用预先配置的方法动态配置线程数;然后,将线程数直接覆盖原始线程数;再根据线程数和原始线程数确定当前的工作线程执行策略;最后,再根据工作线程执行策略对线程池的工作线程执行相应的配置操作。可见,该方法能够实现动态配置线程池并自动维护工作线程,配置人员专业门槛低,从而降低了线程池的配置难度,降低了线程池参数维护成本。
10.进一步地,所述根据所述线程数和原始线程数确定当前的工作线程执行策略,包括:
11.判断所述线程数是否大于所述原始线程数;
12.如果否,则确定当前的工作线程执行策略为对多余的工作线程进行处理的策略;
13.如果是,则确定当前的工作线程执行策略为新增工作线程的处理策略。
14.进一步地,所述根据所述工作线程执行策略对所述线程池的工作线程执行相应的配置操作,包括:
15.在当前的工作线程执行策略为对多余的工作线程进行处理的策略时,确定当前多余的工作线程;
16.根据所述工作线程执行策略向所述多余的工作线程发起中断请求以回收所述多
余的工作线程。
17.进一步地,所述根据所述工作线程执行策略对所述线程池的工作线程执行相应的配置操作,包括:
18.在当前的工作线程执行策略为新增工作线程的处理策略时,根据所述工作线程执行策略创建新的工作线程,并通过所述新的工作线程执行队列任务。
19.进一步地,所述方法还包括:
20.监控所述线程池的当前使用信息;其中,所述当前使用信息包括线程池活跃度、任务执行频率、任务执行耗时、异常值以及线程池内部统计信息中的一种或者多种;
21.根据所述当前使用信息判断所述线程池当前是否出现异常;
22.如果是,则输出异常报警信息。
23.进一步地,所述方法还包括:
24.在未检测到线程池抛出异常值时,获取所述线程池当前的活跃线程数和预先配置的线程池最大线程数;
25.根据所述活跃线程数和所述线程池最大线程数计算线程池活跃度;
26.根据所述线程池活跃度判断所述线程池是否过载;
27.如果是,则输出所述线程池过载的提示信息。
28.本技术实施例第二方面提供了一种线程池配置装置,所述线程池配置装置包括:
29.动态配置单元,用于在线程池运行期,调用预先配置的方法动态配置线程数;
30.覆盖单元,用于将所述线程数直接覆盖原始线程数;
31.策略确定单元,用于根据所述线程数和原始线程数确定当前的工作线程执行策略;
32.线程配置单元,用于根据所述工作线程执行策略对所述线程池的工作线程执行相应的配置操作。
33.在上述实现过程中,该装置可以通过动态配置单元在线程池运行期,调用预先配置的方法动态配置线程数;通过覆盖单元将线程数直接覆盖原始线程数;通过策略确定单元来根据线程数和原始线程数确定当前的工作线程执行策略;最后,再通过线程配置单元来根据工作线程执行策略对线程池的工作线程执行相应的配置操作。可见,该装置能够实现动态配置线程池并自动维护工作线程,配置人员专业门槛低,从而降低了线程池的配置难度,降低了线程池参数维护成本。
34.进一步地,所述策略确定单元包括:
35.判断子单元,用于判断所述线程数是否大于所述原始线程数;
36.策略确定子单元,用于当判断出所述线程数不大于所述原始线程数时,确定当前的工作线程执行策略为对多余的工作线程进行处理的策略;以及当判断出所述线程数大于所述原始线程数时,确定当前的工作线程执行策略为新增工作线程的处理策略。
37.进一步地,所述线程配置单元包括:
38.线程确定子单元,用于在当前的工作线程执行策略为对多余的工作线程进行处理的策略时,确定当前多余的工作线程;
39.请求发起子单元,用于根据所述工作线程执行策略向所述多余的工作线程发起中断请求以回收所述多余的工作线程。
40.进一步地,所述线程配置单元,还用于在当前的工作线程执行策略为新增工作线程的处理策略时,根据所述工作线程执行策略创建新的工作线程,并通过所述新的工作线程执行队列任务。
41.进一步地,所述线程池配置装置还包括:
42.监控单元,用于监控所述线程池的当前使用信息;其中,所述当前使用信息包括线程池活跃度、任务执行频率、任务执行耗时、异常值以及线程池内部统计信息中的一种或者多种;
43.判断单元,用于根据所述当前使用信息判断所述线程池当前是否出现异常;
44.输出单元,用于在所述线程池当前出现所述异常时,输出异常报警信息。
45.进一步地,所述线程池配置装置还包括:
46.获取单元,用于在未检测到线程池抛出异常值时,获取所述线程池当前的活跃线程数和预先配置的线程池最大线程数;
47.计算单元,用于根据所述活跃线程数和所述线程池最大线程数计算线程池活跃度;
48.所述判断单元,还用于根据所述线程池活跃度判断所述线程池是否过载;
49.所述输出单元,还用于在所述线程池过载时,输出所述线程池过载的提示信息。
50.本技术实施例第三方面提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本技术实施例第一方面中任一项所述的线程池配置方法。
51.本技术实施例第四方面提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本技术实施例第一方面中任一项所述的线程池配置方法。
附图说明
52.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
53.图1为本技术实施例提供的一种线程池配置方法的流程示意图;
54.图2为本技术实施例提供的另一种线程池配置方法的流程示意图;
55.图3为本技术实施例提供的一种线程池配置装置的结构示意图;
56.图4为本技术实施例提供的另一种线程池配置装置的结构示意图;
57.图5为本技术实施例提供的一种线程池配置方法中setcorepoolsize的举例流程图。
具体实施方式
58.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
59.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本技术的
描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
60.实施例1
61.请参看图1,图1为本实施例提供了一种线程池配置方法的流程示意图。其中,该线程池配置方法包括:
62.s101、在线程池运行期,调用预先配置的方法动态配置线程数。
63.s102、将线程数直接覆盖原始线程数。
64.s103、根据线程数和原始线程数确定当前的工作线程执行策略。
65.s104、根据工作线程执行策略对线程池的工作线程执行相应的配置操作。
66.本实施例中,java线程池是一种基于池化思想管理线程的工具,线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。其中,线程池使用面临的核心的问题在于:线程池的参数并不好配置。一方面线程池的运行机制不是很好理解,配置合理需要强依赖开发人员的个人经验和知识;另一方面,线程池执行的情况和任务类型相关性较大,io密集型和cpu密集型的任务运行起来的情况差异非常大,这导致业界并没有一些成熟的经验策略帮助开发人员参考。基于上述问题和业界方案,可以得知发任务的执行情况和任务类型相关,io密集型和cpu密集型的任务运行起来的情况差异非常大,但这种占比是较难合理预估的,这导致很难有一个简单有效的通用公式来直接计算出结果。基于该具体问题,本技术提出了一种新的线程池配置方法,该方法具体为动态化线程池参数的方法。
67.本实施例中,该方法的执行主体可以为计算机、服务器等计算装置,对此本实施例中不作任何限定。
68.在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。
69.可见,实施本实施例所描述的线程池配置方法,能够在成本和收益之间,取得很好的平衡。并降低实现动态化以及监控的成本。另外,还能够在不颠覆原有线程池使用方式的基础之上,从降低线程池参数修改的成本以及多维度监控这两个方面降低了故障发生的概率。
70.实施例2
71.请参看图2,图2为本实施例提供了一种线程池配置方法的流程示意图。其中,该线程池配置方法包括:
72.s201、在线程池运行期,调用预先配置的方法动态配置线程数。
73.s202、将线程数直接覆盖原始线程数。
74.s203、判断线程数是否大于原始线程数,若是,则执行步骤s204~s205;若否,则执行步骤s206~s208。
75.s204、确定当前的工作线程执行策略为新增工作线程的处理策略。
76.s205、根据工作线程执行策略创建新的工作线程,并通过新的工作线程执行队列任务,并触发执行步骤s209。
77.s206、确定当前的工作线程执行策略为对多余的工作线程进行处理的策略。
78.s207、确定当前多余的工作线程。
79.s208、根据工作线程执行策略向多余的工作线程发起中断请求以回收多余的工作线程,并触发执行步骤s209。
80.s209、在未检测到线程池抛出异常值时,获取线程池当前的活跃线程数和预先配置的线程池最大线程数。
81.s210、根据活跃线程数和线程池最大线程数计算线程池活跃度。
82.s211、根据线程池活跃度判断线程池是否过载,若是,则执行步骤s212;如否,则执行步骤s213~s214。
83.s212、输出线程池过载的提示信息,并结束本流程。
84.本实施例中,该方法基于当前线程池参数分配的资源够不够这一问题,于事前在线程池定义了“活跃度”这个概念,以使用户在发生reject异常之前能够感知线程池负载问题。其中,线程池活跃度计算公式为:线程池活跃度=activecount/maximumpoolsize。这个公式代表当活跃线程数趋向于maximumpoolsize的时候,代表线程负载趋高;于事中时,可以从两方面来看线程池的过载判定条件,一个是发生了reject异常,另一个则是队列中有等待任务(支持定制阈值)。
85.s213、监控线程池的当前使用信息;其中,当前使用信息包括线程池活跃度、任务执行频率、任务执行耗时、异常值以及线程池内部统计信息中的一种或者多种。
86.s214、根据当前使用信息判断线程池当前是否出现异常,若是,则执行步骤s215;如否,则结束本流程。
87.s215、输出异常报警信息。
88.本实施例中,该方法能投公国动态化线程池提供多个维度的监控和告警能力,包括:线程池活跃度、任务的执行transaction(频率、耗时)、reject异常、线程池内部统计信息等等。如此既能帮助用户从多个维度分析线程池的使用情况,又能在出现问题第一时间通知到用户,从而避免故障或加速故障恢复。
89.本实施例中,该方法可以简化线程池配置。其中,线程池构造参数有8个,但是最核心的是3个:corepoolsize、maximumpoolsize,workqueue,它们最大程度地决定了线程池的任务分配和线程分配策略。考虑到在实际应用中获取并发性的场景主要是两种:
90.(1)并行执行子任务,提高响应速度。这种情况下,应该使用同步队列,没有什么任务应该被缓存下来,而是应该立即执行。
91.(2)并行执行大批次任务,提升吞吐量。这种情况下,应该使用有界队列,使用队列去缓冲大批量的任务,队列容量必须声明,防止任务无限制堆积。
92.所以线程池只需要提供这三个关键参数的配置,并且提供两种队列的选择,就可以满足绝大多数的业务需求。
93.本实施例中,该方法可动态修改参数。其中,为了解决参数不好配,修改参数成本高等问题。在java线程池留有高扩展性的基础上,封装线程池,允许线程池监听同步外部的消息,根据消息进行修改配置。将线程池的配置放置在平台侧,允许开发人员简单的查看、修改线程池配置。
94.本实施例中,该方法增加了线程池监控。具体的,可以对在线程池执行任务的生命周期添加监控能力,帮助开发人员了解线程池状态。
95.举例来说,jdk允许线程池使用方通过threadpoolexecutor的实例来动态设置线程池的核心策略,以setcorepoolsize为方法例,在运行期线程池使用方调用此方法设置corepoolsize之后,线程池会直接覆盖原来的corepoolsize值,并且基于当前值和原始值的比较结果采取不同的处理策略。对于当前值小于当前工作线程数的情况,说明有多余的worker线程,此时会向当前idle的worker线程发起中断请求以实现回收,多余的worker在下次idel的时候也会被回收;对于当前值大于原始值且当前队列中有待执行任务,则线程池会创建新的worker线程来执行队列任务,setcorepoolsize具体流程如图5所示。
96.本实施例中,该方法的执行主体可以为计算机、服务器等计算装置,对此本实施例中不作任何限定。
97.在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。
98.可见,实施本实施例所描述的线程池配置方法,能够在成本和收益之间,取得很好的平衡。并降低实现动态化以及监控的成本。另外,还能够在不颠覆原有线程池使用方式的基础之上,从降低线程池参数修改的成本以及多维度监控这两个方面降低了故障发生的概率。
99.实施例3
100.请参看图3,图3为本实施例提供的一种线程池配置装置的结构示意图。如图3所示,该线程池配置装置包括:
101.动态配置单元310,用于在线程池运行期,调用预先配置的方法动态配置线程数;
102.覆盖单元320,用于将线程数直接覆盖原始线程数;
103.策略确定单元330,用于根据线程数和原始线程数确定当前的工作线程执行策略;
104.线程配置单元340,用于根据工作线程执行策略对线程池的工作线程执行相应的配置操作。
105.本实施例中,对于线程池配置装置的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。
106.可见,实施本实施例所描述的线程池配置装置,能够在成本和收益之间,取得很好的平衡。并降低实现动态化以及监控的成本。另外,还能够在不颠覆原有线程池使用方式的基础之上,从降低线程池参数修改的成本以及多维度监控这两个方面降低了故障发生的概率。
107.实施例4
108.请参看图4,图4为本实施例提供的一种线程池配置装置的结构示意图。如图4所示,该线程池配置装置包括:
109.动态配置单元310,用于在线程池运行期,调用预先配置的方法动态配置线程数;
110.覆盖单元320,用于将线程数直接覆盖原始线程数;
111.策略确定单元330,用于根据线程数和原始线程数确定当前的工作线程执行策略;
112.线程配置单元340,用于根据工作线程执行策略对线程池的工作线程执行相应的配置操作。
113.作为一种可选的实施方式,策略确定单元330包括:
114.判断子单元331,用于判断线程数是否大于原始线程数;
115.策略确定子单元332,用于当判断出线程数不大于原始线程数时,确定当前的工作线程执行策略为对多余的工作线程进行处理的策略;以及当判断出线程数大于原始线程数时,确定当前的工作线程执行策略为新增工作线程的处理策略。
116.作为一种可选的实施方式,线程配置单元340包括:
117.线程确定子单元341,用于在当前的工作线程执行策略为对多余的工作线程进行处理的策略时,确定当前多余的工作线程;
118.请求发起子单元342,用于根据工作线程执行策略向多余的工作线程发起中断请求以回收多余的工作线程。
119.作为一种可选的实施方式,线程配置单元340,还用于在当前的工作线程执行策略为新增工作线程的处理策略时,根据工作线程执行策略创建新的工作线程,并通过新的工作线程执行队列任务。
120.作为一种可选的实施方式,线程池配置装置还包括:
121.监控单元350,用于监控线程池的当前使用信息;其中,当前使用信息包括线程池活跃度、任务执行频率、任务执行耗时、异常值以及线程池内部统计信息中的一种或者多种;
122.判断单元360,用于根据当前使用信息判断线程池当前是否出现异常;
123.输出单元370,用于在线程池当前出现异常时,输出异常报警信息。
124.作为一种可选的实施方式,线程池配置装置还包括:
125.获取单元380,用于在未检测到线程池抛出异常值时,获取线程池当前的活跃线程数和预先配置的线程池最大线程数;
126.计算单元390,用于根据活跃线程数和线程池最大线程数计算线程池活跃度;
127.判断单元360,还用于根据线程池活跃度判断线程池是否过载;
128.输出单元370,还用于在线程池过载时,输出线程池过载的提示信息。
129.本实施例中,对于线程池配置装置的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。
130.可见,实施本实施例所描述的线程池配置装置,能够在成本和收益之间,取得很好的平衡。并降低实现动态化以及监控的成本。另外,还能够在不颠覆原有线程池使用方式的基础之上,从降低线程池参数修改的成本以及多维度监控这两个方面降低了故障发生的概率。
131.本技术实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本技术实施例1或实施例2中的线程池配置方法。
132.本技术实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本技术实施例1或实施例2中的线程池配置方法。
133.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一
部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
134.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
135.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
136.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
137.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
138.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1