一种java线程池分级处理方法和装置与流程

文档序号:20016900发布日期:2020-02-25 10:42阅读:261来源:国知局
一种java线程池分级处理方法和装置与流程

本发明涉及线程池技术领域,尤其涉及一种java线程池分级处理方法和装置。



背景技术:

对于电商类平台,pv/uv的增长速度快,并发请求高,对系统的响应时间的要求比较高,通常采用线程池来增加系统的并发处理能力,以发挥系统的效能。

由于电商类平台的用户请求类型包括交易类业务和非交易类业务,因此不同的业务类型使用线程池的目的也不同,像交易类业务,如提交订单,使用线程池可以并发操作提交订单流程中涉及到的各类资源处理,从而减少提交订单的响应时间;而像非交易类业务,如订单信息同步,具有数据量大,但实时性要求不高的特点,使用线程池可以增大并发处理能力,提高吞吐量。

通常来说,交易类业务的优先级肯定要高于非交易类业务,因此需要优先保证交易类业务的处理能力,在线程池资源有限的情况下,可以适当减少或者牺牲非交易类业务的处理能力,但现有的的线程池或基于顺序执行或基于优先级排队决定线程调度的先后顺序,在高并发环境下都可能出现线程处理不及时甚至线程饥饿,导致服务响应不及时,影响了用户体验。



技术实现要素:

本发明的目的在于提供一种java线程池分级处理的方法和装置,能够调配有限的线程池资源优先处理优先级较高的业务请求,以保证高优先级的业务请求能够被高效处理。

为了实现上述目的,本发明的一方面提供一种java线程池分级处理方法,包括:

步骤s1,基于业务请求的类型分级,并配置与分级数目相等数量的线程池;

步骤s2,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;

步骤s3,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,所述适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;

步骤s4,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;

步骤s5,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3。

优选地,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池的方法包括:

所述业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求,配置的线程池类型对应包括高优先级线程池、中优先级线程池和低优先级线程池;其中,

所述高优先级线程池用于处理高优先级业务请求;

所述中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;

所述低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。

示例性地,各所述线程池的大小参考应用的特点对应设定;

当针对cpu密集型应用时,所述线程池的大小n=i+1,当针对io密集型应用时,所述线程池的大小n=2i+1;

所述i表示处理器芯片的核数,所述n表示线程池中线程的个数。

较佳地,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池的方法包括:

获取当前业务请求,调用异步执行处理方法asyncexecute设定当前业务请求的优先级别;

基于当前业务请求的优先级别调用线程分配处理模块distributetask对线程池进行筛选,获取适用于当前业务请求的线程池;

所述筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。

优选地,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求的方法包括:

将适用的线程池按照优先级别由高到低顺序排列;

通过告警器逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;

从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。

可选地,所述线程池触发状态的判断条件为:

当线程池中活跃线程数量超过线程池总线程数量的85%,则判断该线程池被触发,否则判断该线程池未被触发。

可选地,在告警器逐一监测顺序排列的线程池触发状态时,还会通过监测器将当前线程池的监测结果发送至管理人员监控;

所述监测结果包括线程池标识、线程池总线程数量、活跃线程数量、线程池的触发状态。

进一步地,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3的方法包括:

在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3;或者,

在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3。

与现有技术相比,本发明提供的java线程池分级处理的方法具有以下有益效果:

本发明提供的java线程池分级处理的方法中,首先基于业务请求的类型进行分级,分级的标准可按照业务请求的响应时间需求而定,例如交易类业务一般对响应时间要求较高,可将交易类业务标记为高优先级,查询类业务一般对响应时间要求次之,可将查询类业务标记为中优先级,信息同步类业务对响应时间要求低,可将信息同步类业务标记为低优先级,然后根据上述分级的业务请求类型将有限的线程资源对应划分为高优先级线程池、中优先级线程池和低优先级线程池,从而实现较高优先级的业务请求不仅能够被与其匹配的线程池处理,还可在所匹配的线程池被触发时,征用低一级或两级的线程池处理该业务请求,即,高优先级的业务请求不仅能够被高优先级线程池处理,还可以被中优先级线程池或者低优先级线程池所处理,同理,中优先级业务请求不仅能够被中优先级线程池处理,也可以被低优先级线程池所处理,从而最大限度的保证了高优先级业务能够有多个线程池资源使用,确保高优先级的业务请求能够被高效处理。

本发明的另一方面提供一种java线程池分级处理装置,包括分级单元、配置单元、第一执行单元、第二执行单元和调度单元;

所述分级单元用于基于业务请求的类型分级,并配置与分级数目相等数量的线程池;

所述配置单元用于分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;

所述筛选单元第一执行单元用于设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,所述适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;

所述第二执行单元用于在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;

所述调度单元用于在当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元。

优选地,所述配置单元包括业务请求配置模块和线程池配置模块;

所述业务请求配置模块用于获取业务请求类型,所述业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求;

所述线程池配置模块用于基于获取的业务请求类型,配置高优先级线程池、中优先级线程池和低优先级线程池;

所述高优先级线程池用于处理高优先级业务请求;

所述中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;

所述低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。

较佳地,所述第一执行单元包括业务请求获取模块和线程池筛选模块;

所述业务请求获取模块用于获取当前业务请求,调用异步执行处理方法asyncexecute设定当前业务请求的优先级别;

所述线程池筛选模块用于基于当前业务请求的优先级别调用线程分配处理模块distributetask对线程池进行筛选,获取适用于当前业务请求的线程池;

所述筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。

优选地,所述第二执行单元包括排序模块、告警器模块和处理模块;

所述排序模块用于将适用的线程池按照优先级别由高到低顺序排列;

所述告警器模块用于逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;

所述处理模块用于从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。

优选地,所述调度单元包括判断模块和调度器;

所述判断模块用于在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元。;或者,

用于在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元。

与现有技术相比,本发明提供的java线程池分级处理装置的有益效果与上述技术方案提供的java线程池分级处理方法的有益效果相同,在此不做赘述。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例一中java线程池分级处理方法的流程示意图;

图2为本发明实施例二中java线程池分级处理装置的结构框图。

附图标记:

1-分级单元,2-配置单元;

3-第一执行单元,4-第二执行单元;

5-调度单元。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。

实施例一

图1为本发明实施例一中java线程池分级处理方法的流程示意图。请参阅图1,本实施例提供一种java线程池分级处理方法,包括:

步骤s1,基于业务请求的类型分级,并配置与分级数目相等数量的线程池;步骤s2,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;步骤s3,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;步骤s4,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;步骤s5,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3。

具体实施时,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池的方法包括:

业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求,配置的线程池类型对应包括高优先级线程池、中优先级线程池和低优先级线程池;其中,高优先级线程池用于处理高优先级业务请求;中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。

根据上述具体实施过程可知,首先基于业务请求的类型进行分级,分级的标准可按照业务请求的响应时间需求而定,例如交易类业务一般对响应时间要求较高,可将交易类业务标记为高优先级,查询类业务一般对响应时间要求次之,可将查询类业务标记为中优先级,信息同步类业务对响应时间要求低,可将信息同步类业务标记为低优先级,然后根据上述分级的业务请求类型将有限的线程资源对应划分为高优先级线程池、中优先级线程池和低优先级线程池,从而实现较高优先级的业务请求不仅能够被与其匹配的线程池处理,还可在所匹配的线程池被触发时,征用低一级或两级的线程池处理该业务请求,即,高优先级的业务请求不仅能够被高优先级线程池处理,还可以被中优先级线程池或者低优先级线程池所处理,同理,中优先级业务请求不仅能够被中优先级线程池处理,也可以被低优先级线程池所处理,从而最大限度的保证了高优先级业务能够有多个线程池资源使用,确保高优先级的业务请求能够被高效处理。

需要补充的是,上述实施例中各线程池的大小可参考应用的特点对应设定;示例性地,当针对cpu密集型应用时,线程池的大小n=i+1,当针对io密集型应用时,线程池的大小n=2i+1;其中,i表示处理器芯片的核数,n表示线程池中线程的个数。

具体地,上述实施例中设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池的方法包括:

获取当前业务请求,调用异步执行处理方法asyncexecute设定当前业务请求的优先级别;基于当前业务请求的优先级别调用线程分配处理模块distributetask对线程池进行筛选,获取适用于当前业务请求的线程池;筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。

在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求的方法包括:

将适用的线程池按照优先级别由高到低顺序排列;通过告警器逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。

具体实施时,上述筛选和优先调用的逻辑如下,首先需要设定当前业务请求的优先级,当前业务请求类型可以设定为高优先级业务请求、中优先级业务请求或低优先级业务请求。示例性地,当为高优先级业务请求时,第一步判断高优先级线程池的队列任务数是否被触发,在判断结果为没被触发时,直接调用高优先级线程池处理当前业务请求,在判断结果为被触发时,继续第二步判断中优先级线程池的队列任务数是否被触发,并在判断结果为没被触发时,直接调用中优先级线程池处理当前业务请求,在判断结果为被触发时,继续第三步判断低优先级线程池的队列任务数是否被触发,并在判断结果为没被触发时,直接调用低优先级线程池处理当前业务请求,否则,将当前业务请求添加到任务缓存队列由调度器重新调度分配。

当为中优先级业务请求时,第一步判断中优先级线程池的队列任务数是否被触发,在判断结果为没被触发时,直接调用中优先级线程池处理当前业务请求,在判断结果为被触发时,继续第二步判断低优先级线程池的队列任务数是否被触发,并在判断结果为没被触发时,直接调用低优先级线程池处理当前业务请求,否则,将当前业务请求添加到任务缓存队列由调度器重新调度分配。

当为低优先级业务请求时,第一步判断低优先级线程池的队列任务数是否被触发,在判断结果为没被触发时,直接调用低优先级线程池处理当前业务请求,在判断结果为被触发时,第二步判断中优先级线程池的队列任务数是否被触发,在判断结果为没被触发时,再次调用中优先级线程池处理当前业务请求,否则,只能将当前业务请求添加到任务缓存队列由调度器重新调度分配。

可以理解的是,线程池的触发条件可由管理人员基于实际情况自由设定,本实施例对此不做限定,通常,当线程池中活跃线程数量超过线程池总线程数量的85%,则判断该线程池被触发,否则判断该线程池未被触发。同时,在告警器逐一监测顺序排列的线程池触发状态时,还会通过监测器将当前线程池的监测结果发送至管理人员监控;监测结果包括线程池标识、线程池总线程数量、活跃线程数量、线程池的触发状态,以使管理人员能够对各线程池的工作状态进行有效监控。

进一步地,上述实施例中若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3的方法包括:

在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3;或者,

在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤s3。

实施例二

请参阅图1和图2,本实施例提供一种java线程池分级处理装置,包括分级单元1、配置单元2、第一执行单元3、第二执行单元4和调度单元5;

分级单元1用于基于业务请求的类型分级,并配置与分级数目相等数量的线程池;

配置单元2用于分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;

筛选单元3第一执行单元用于设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;

第二执行单元4用于在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;

调度单元5用于在当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配至筛选单元。

上述实施例中配置单元2包括业务请求配置模块和线程池配置模块;

业务请求配置模块用于获取业务请求类型,业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求;

线程池配置模块用于基于获取的业务请求类型,配置高优先级线程池、中优先级线程池和低优先级线程池;

高优先级线程池用于处理高优先级业务请求;

中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;

低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。

上述实施例中第一执行单元3包括业务请求获取模块和线程池筛选模块;

业务请求获取模块用于获取当前业务请求,调用异步执行处理方法asyncexecute设定当前业务请求的优先级别;

线程池筛选模块用于基于当前业务请求的优先级别调用线程分配处理模块distributetask对线程池进行筛选,获取适用于当前业务请求的线程池;

筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。

上述实施例中第二执行单元4包括排序模块、告警器模块和处理模块;

排序模块用于将适用的线程池按照优先级别由高到低顺序排列;

告警器模块用于逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;

处理模块用于从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。

上述实施例中调度单元5包括判断模块和调度器;

判断模块用于在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配至筛选单元;或者,

用于在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配至筛选单元。

与现有技术相比,本发明实施例提供的java线程池分级处理装置的有益效果与上述实施例一提供的java线程池分级处理方法的有益效果相同,在此不做赘述。

本领域普通技术人员可以理解,实现上述发明方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,上述程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而的存储介质可以是:rom/ram、磁碟、光盘、存储卡等。

以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1