线程池动态创建方法、装置、设备及存储介质制造方法及图纸

技术编号:35413429 阅读:13 留言:0更新日期:2022-11-03 11:10
本发明专利技术公开了一种线程池动态创建方法、装置、设备及存储介质,其中方法包括:接收待处理任务;将待处理任务分配至初始线程池进行处理,并记录处理待处理任务的总耗时,初始线程池包括已创建的初始线程池或新创建的初始线程池;当满足预设条件时,根据初始线程池的当前核心线程数、总耗时和预设期望耗时生成新的线程池参数;根据新的线程池参数创建新的线程池,并将后续任务分配至新的线程池进行处理。本发明专利技术通过在接收到任务后,利用初始线程池对该任务进行处理,同时记录处理的总耗时,在结合预设期望耗时和初始线程池的核心线程数生成创建新的线程池,以更高效地处理任务,优化对系统资源的利用。对系统资源的利用。对系统资源的利用。

【技术实现步骤摘要】
线程池动态创建方法、装置、设备及存储介质


[0001]本申请涉及计算机
,特别是涉及一种线程池动态创建方法、装置、设备及存储介质。

技术介绍

[0002]计算机程序是通过线程来执行相关任务、处理数据的,在处理并发任务或批量数据时,单线程方案的处理效率很低,一般都会选择使用多线程方案来处理。目前java开发一般使用多线程的时候,会用到线程池,ThreadPoolExecutor就是常用的线程池,在程序开发中设置线程池及其可配置的参数,完成程序开发后,可在应用程序启动之前设置相关参数。
[0003]当任务提交到线程池时,首先判断核心线程池是否已满,若没满,创建/分配一个工作线程来处理任务;若已满,则判断任务阻塞队列是否已满,若没满,按先进先出原则将新提交的任务存储在队列里等待执行;若已满,则判断整个线程池是否已满,若没满,创建/分配一个工作线程来处理任务;若已满,根据拒绝策略来处理这个任务。因此,线程池使用最核心的是线程池的参数配置,线程池若参数配置不合理,会引发故障,给系统带来不可预知的问题。目前对于线程池的参数设置都是一次性的,应用程序启动之后,就无法动态设置线程池的配置参数,而对于任务类型的不同,其最合理的线程池参数配置是不同的,例如,当业务发生变化,由CPU密集型变为IO密集型时,过多的线程会造成线程切换的消耗持续增加,进而影响到业务的响应时间,其一方面降低了系统的任务处理效率,另一方面对系统资源的利用也不够合理。

技术实现思路

[0004]本申请提供一种线程池动态创建线程池动态创建方法、装置、设备及存储介质,以解决现有的线程池参数配置过于呆板导致系统资源利用不合理、任务处理效率低的问题。
[0005]为解决上述技术问题,本申请采用的一个技术方案是:提供一种线程池动态创建方法,包括:接收待处理任务;将待处理任务分配至初始线程池进行处理,并记录处理待处理任务的总耗时,初始线程池包括已创建的初始线程池或新创建的初始线程池;当满足预设条件时,根据初始线程池的当前核心线程数、总耗时和预设期望耗时生成新的线程池参数;根据新的线程池参数创建新的线程池,并将后续任务分配至新的线程池进行处理。
[0006]作为本申请的进一步改进,当满足预设条件时,根据初始线程池的当前核心线程数、总耗时和预设期望耗时生成新的线程池参数,包括:判断待处理任务是CPU密集型任务还是IO密集型任务;当待处理任务是IO密集型任务时,根据总耗时获取待处理任务被处理时的IO读取时间、CPU计算时间;当总耗时大于预设期望耗时时,确认IO读取时间与CPU计算时间的大小关系;当IO读取时间大于等于CPU计算时间时,根据当前核心线程数和第一预设规则计算得到第一核心线程数,第一核心线程数多于当前核心线程数;当IO读取时间小于CPU计算时间时,根据当前核心线程数和第二预设规则计算得到第二核心线程数,第二核心线程数少于当前核心线程数;基于第一核心线程数或第二核心线程数,结合预先获取的用
户配置参数生成新的线程池参数,新的线程池参数包括第一核心线程数或第二核心线程数、最大线程数、线程空闲时间和任务阻塞队列长度。
[0007]作为本申请的进一步改进,第一预设规则包括:第一核心线程数=(当前核心线程数+1)*125/100;第二预设规则包括:第二核心线程数=当前核心线程数*75/100+1。
[0008]作为本申请的进一步改进,将待处理任务分配至初始线程池进行处理,并记录处理待处理任务的总耗时,包括:确认待处理任务对应的任务类型,任务类型包括CPU密集型和IO密集型;判断是否存在与任务类型对应的初始线程池;若存在,则将待处理任务分配至对应的初始线程池进行处理,并记录总耗时;若不存在,则获取系统性能参数,并根据系统性能参数和任务类型创建初始线程池,并将待处理任务分配至初始线程池处理并记录总耗时。
[0009]作为本申请的进一步改进,根据系统性能参数和任务类型创建初始线程池,包括:获取系统的CPU核心数;根据任务类型和CPU核心数设置初始线程核心数,当任务类型为CPU密集型时,初始线程核心数与CPU核心数相同,当任务类型为IO密集型时,初始线程核心数为CPU核心数的二倍;根据预先获取的用户配置参数设置最大线程数、线程空闲时间和任务阻塞队列长度;根据初始线程核心数、最大线程数、线程空闲时间和任务阻塞队列长度创建初始线程池。
[0010]作为本申请的进一步改进,确认待处理任务对应的任务类型之前,还包括:获取用户预先为系统中每个应用打上的任务类型标签,任务类型标签表征每个应用产生的任务对应的任务类型。
[0011]作为本申请的进一步改进,将后续任务分配至新的线程池进行处理之后,还包括:当初始线程池和新的线程池均用于同一任务类型的任务时,在初始线程池每个线程处理完正在执行的任务后,删除初始线程池。
[0012]为解决上述技术问题,本申请采用的另一个技术方案是:提供一种线程池动态创建装置,包括:接收模块,用于接收待处理任务;记录模块,用于将待处理任务分配至初始线程池进行处理,并记录处理待处理任务的总耗时,初始线程池包括已创建的初始线程池或新创建的初始线程池;生成模块,用于当满足预设条件时,根据初始线程池的当前核心线程数、总耗时和预设期望耗时生成新的线程池参数;创建模块,用于根据新的线程池参数创建新的线程池,并将后续任务分配至新的线程池进行处理。
[0013]为解决上述技术问题,本申请采用的再一个技术方案是:提供一种计算机设备,所述计算机设备包括处理器、与所述处理器耦接的存储器,所述存储器中存储有程序指令,所述程序指令被所述处理器执行时,使得所述处理器执行如上述中任一项所述的线程池动态创建方法的步骤。
[0014]为解决上述技术问题,本申请采用的再一个技术方案是:提供一种存储介质,存储有能够实现上述线程池动态创建方法的程序指令。
[0015]本申请的有益效果是:本申请的线程池动态创建方法通过利用初始线程池对任务进行处理,记录处理任务的总耗时,再结合初始线程池的核心线程数、总耗时和预设期望耗时生成新的线程池参数,最后根据新的线程池参数创建新的线程池并利用新的线程池处理后续任务,当某一业务产生大量同类型的任务时,根据初次执行该类型任务的情况及时调整线程池参数并构建新的线程池,以使得新的线程池能够更为合理的执行该业务产生的所
有任务,其结合任务的实际情况对线程池参数进行合理的设置,大大提升了对系统资源利用的合理性以及任务执行的效率。
附图说明
[0016]图1是本专利技术实施例的线程池动态创建方法的流程示意图;
[0017]图2是本专利技术实施例的步骤S102的流程示意图;
[0018]图3是本专利技术实施例的步骤S103的流程示意图;
[0019]图4是本专利技术实施例的线程池动态创建装置的功能模块示意图;
[0020]图5是本专利技术实施例的计算机设备的结构示意图;
[0021]图6是本专利技术实施例的存储介质的结构示意图。
具体实施方式
[002本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种线程池动态创建方法,其特征在于,包括:接收待处理任务;将所述待处理任务分配至初始线程池进行处理,并记录处理所述待处理任务的总耗时,所述初始线程池包括已创建的初始线程池或新创建的初始线程池;当满足预设条件时,根据所述初始线程池的当前核心线程数、所述总耗时和预设期望耗时生成新的线程池参数;根据所述新的线程池参数创建新的线程池,并将后续任务分配至所述新的线程池进行处理。2.根据权要求1所述的线程池动态创建方法,其特征在于,所述当满足预设条件时,根据所述初始线程池的当前核心线程数、所述总耗时和预设期望耗时生成新的线程池参数,包括:判断所述待处理任务是CPU密集型任务还是IO密集型任务;当所述待处理任务是IO密集型任务时,根据所述总耗时获取所述待处理任务被处理时的IO读取时间、CPU计算时间;当所述总耗时大于所述预设期望耗时时,确认所述IO读取时间与所述CPU计算时间的大小关系;当所述IO读取时间大于等于所述CPU计算时间时,根据所述当前核心线程数和第一预设规则计算得到第一核心线程数,所述第一核心线程数多于所述当前核心线程数;当所述IO读取时间小于所述CPU计算时间时,根据所述当前核心线程数和第二预设规则计算得到第二核心线程数,所述第二核心线程数少于所述当前核心线程数;基于所述第一核心线程数或所述第二核心线程数,结合预先获取的用户配置参数生成新的线程池参数,所述新的线程池参数包括所述第一核心线程数或所述第二核心线程数、最大线程数、线程空闲时间和任务阻塞队列长度。3.根据权利要求2所述的线程池动态创建方法,其特征在于,所述第一预设规则包括:所述第一核心线程数=(所述当前核心线程数+1)*125/100;所述第二预设规则包括:所述第二核心线程数=所述当前核心线程数*75/100+1。4.根据权要求1所述的线程池动态创建方法,其特征在于,所述将所述待处理任务分配至初始线程池进行处理,并记录处理所述待处理任务的总耗时,包括:确认所述待处理任务对应的任务类型,所述任务类型包括CPU密集型和IO密集型;判断是否存在与所述任务类型对应的所述初始线程池;若存在,则将所述待处理任务分配至对应的所述初始线程池进行处理,并记录所述总耗时;若不存在,则获取系统性能参数,并根据所述系统性能参数和所...

【专利技术属性】
技术研发人员:曾浩
申请(专利权)人:中国平安财产保险股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1