CN110837401A - 一种java线程池分级处理方法和装置 - Google Patents
一种java线程池分级处理方法和装置 Download PDFInfo
- Publication number
- CN110837401A CN110837401A CN201810935659.4A CN201810935659A CN110837401A CN 110837401 A CN110837401 A CN 110837401A CN 201810935659 A CN201810935659 A CN 201810935659A CN 110837401 A CN110837401 A CN 110837401A
- Authority
- CN
- China
- Prior art keywords
- service request
- priority
- thread pool
- current service
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 238000000034 method Methods 0.000 claims abstract description 60
- 238000012216 screening Methods 0.000 claims abstract description 33
- 230000001960 triggered effect Effects 0.000 claims description 38
- 238000012544 monitoring process Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 12
- 239000000126 substance Substances 0.000 claims description 2
- 238000001914 filtration Methods 0.000 claims 2
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种java线程池分级处理方法和装置,能够调配有限的线程池资源优先处理优先级较高的业务请求,以保证高优先级的业务请求能够被高效处理。该方法包括:步骤S1,基于业务请求的类型分级,并配置与分级数目相等数量的线程池;步骤S2,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;步骤S3,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;步骤S4,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;步骤S5,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤S3。该装置包括上述技术方案所提的方法。
Description
技术领域
本发明涉及线程池技术领域,尤其涉及一种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、磁碟、光盘、存储卡等。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种java线程池分级处理方法,其特征在于,包括:
步骤S1,基于业务请求的类型分级,并配置与分级数目相等数量的线程池;
步骤S2,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;
步骤S3,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,所述适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;
步骤S4,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;
步骤S5,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤S3。
2.根据权利要求1所述的方法,其特征在于,分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池的方法包括:
所述业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求,配置的线程池类型对应包括高优先级线程池、中优先级线程池和低优先级线程池;其中,
所述高优先级线程池用于处理高优先级业务请求;
所述中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;
所述低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。
3.根据权利要求1所述的方法,其特征在于,各所述线程池的大小参考应用的特点对应设定;
当针对CPU密集型应用时,所述线程池的大小n=i+1,当针对IO密集型应用时,所述线程池的大小n=2i+1;
所述i表示处理器芯片的核数,所述n表示线程池中线程的个数。
4.根据权利要求2所述的方法,其特征在于,设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池的方法包括:
获取当前业务请求,调用异步执行处理方法asyncExecute设定当前业务请求的优先级别;
基于当前业务请求的优先级别调用线程分配处理模块distributeTask对线程池进行筛选,获取适用于当前业务请求的线程池;
所述筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。
5.根据权利要求2所述的方法,其特征在于,在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求的方法包括:
将适用的线程池按照优先级别由高到低顺序排列;
通过告警器逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;
从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。
6.根据权利要求5所述的方法,其特征在于,所述线程池触发状态的判断条件为:
当线程池中活跃线程数量超过线程池总线程数量的85%,则判断该线程池被触发,否则判断该线程池未被触发。
7.根据权利要求5所述的方法,其特征在于,在告警器逐一监测顺序排列的线程池触发状态时,还会通过监测器将当前线程池的监测结果发送至管理人员监控;
所述监测结果包括线程池标识、线程池总线程数量、活跃线程数量、线程池的触发状态。
8.根据权利要求5所述的方法,其特征在于,若当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤S3的方法包括:
在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤S3;或者,
在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配返回步骤S3。
9.一种java线程池分级处理装置,其特征在于,包括分级单元、配置单元、第一执行单元、第二执行单元和调度单元;
所述分级单元用于基于业务请求的类型分级,并配置与分级数目相等数量的线程池;
所述配置单元用于分别设定各线程池的优先级别,形成由高到低不同优先级别的线程池;
所述筛选单元第一执行单元用于设置当前业务请求的优先级别,依次筛选出适用于当前业务请求的线程池;其中,所述适用于当前业务请求的线程池包括与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池;
所述第二执行单元用于在适用的多个线程池中,优先调用优先级别高且有能力处理当前业务请求的线程池处理当前业务请求;
所述调度单元用于在当前业务请求未被处理,则将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元。
10.根据权利要求9所述的装置,其特征在于,所述配置单元包括业务请求配置模块和线程池配置模块;
所述业务请求配置模块用于获取业务请求类型,所述业务请求类型分为高优先级业务请求、中优先级业务请求和低优先级业务请求;
所述线程池配置模块用于基于获取的业务请求类型,配置高优先级线程池、中优先级线程池和低优先级线程池;
所述高优先级线程池用于处理高优先级业务请求;
所述中优先级线程池用于优先处理中优先级业务请求,以及能够处理高优先级业务请求;
所述低优先级业务请求用于优先处理低优先级业务请求,以及能够处理中优先级业务请求或者高优先级业务请求。
11.根据权利要求9所述的装置,其特征在于,所述第一执行单元包括业务请求获取模块和线程池筛选模块;
所述业务请求获取模块用于获取当前业务请求,调用异步执行处理方法asyncExecute设定当前业务请求的优先级别;
所述线程池筛选模块用于基于当前业务请求的优先级别调用线程分配处理模块distributeTask对线程池进行筛选,获取适用于当前业务请求的线程池;
所述筛选逻辑为筛选出与当前业务请求优先级别匹配,以及比当前业务请求优先级别低的线程池。
12.根据权利要求9所述的装置,其特征在于,所述第二执行单元包括排序模块、告警器模块和处理模块;
所述排序模块用于将适用的线程池按照优先级别由高到低顺序排列;
所述告警器模块用于逐一监测顺序排列的线程池的触发状态,当线程池未被触发则表示有能力处理当前业务请求;
所述处理模块用于从未被触发告警的线程池中优先调用优先级别高的线程池对当前业务请求进行处理。
13.根据权利要求9所述的装置,其特征在于,所述调度单元包括判断模块和调度器;
所述判断模块用于在当前业务请求为低优先级业务请求且未被处理时,增加判断中优先级线程池是否有能力处理当前业务请求,并在判断结果为是时直接调用中优先级线程池处理,否则,将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元;或者,
用于在当前业务请求为高优先级业务请求/中优先级业务请求且未被处理时,直接将当前业务请求加入任务缓冲队列,由调度器重新调度分配至所述筛选单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810935659.4A CN110837401A (zh) | 2018-08-16 | 2018-08-16 | 一种java线程池分级处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810935659.4A CN110837401A (zh) | 2018-08-16 | 2018-08-16 | 一种java线程池分级处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110837401A true CN110837401A (zh) | 2020-02-25 |
Family
ID=69574053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810935659.4A Pending CN110837401A (zh) | 2018-08-16 | 2018-08-16 | 一种java线程池分级处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110837401A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112000455A (zh) * | 2020-09-10 | 2020-11-27 | 华云数据控股集团有限公司 | 一种多线程任务处理方法、装置及电子设备 |
CN112217990A (zh) * | 2020-09-27 | 2021-01-12 | 北京小米移动软件有限公司 | 任务调度方法、任务调度装置及存储介质 |
CN112328392A (zh) * | 2020-10-27 | 2021-02-05 | 金蝶软件(中国)有限公司 | 一种数据处理方法及相关设备 |
CN112363812A (zh) * | 2020-11-17 | 2021-02-12 | 浪潮云信息技术股份公司 | 基于任务分类的数据库连接队列管理方法及存储介质 |
CN113159957A (zh) * | 2021-05-17 | 2021-07-23 | 深圳前海微众银行股份有限公司 | 一种交易处理方法及装置 |
CN113641517A (zh) * | 2021-08-10 | 2021-11-12 | 平安科技(深圳)有限公司 | 业务数据的发送方法、装置、计算机设备和存储介质 |
WO2021238153A1 (zh) * | 2020-05-28 | 2021-12-02 | 苏州大学 | 一种嵌入式实时操作的线程时间管理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106802826A (zh) * | 2016-12-23 | 2017-06-06 | 中国银联股份有限公司 | 一种基于线程池的业务处理方法及装置 |
CN106899649A (zh) * | 2016-06-30 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种任务请求处理方法、装置和用户设备 |
CN107273206A (zh) * | 2017-05-19 | 2017-10-20 | 国网浙江省电力公司电力科学研究院 | 一种基于业务及数据量控制的优先级调度方法 |
-
2018
- 2018-08-16 CN CN201810935659.4A patent/CN110837401A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106899649A (zh) * | 2016-06-30 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 一种任务请求处理方法、装置和用户设备 |
CN106802826A (zh) * | 2016-12-23 | 2017-06-06 | 中国银联股份有限公司 | 一种基于线程池的业务处理方法及装置 |
CN107273206A (zh) * | 2017-05-19 | 2017-10-20 | 国网浙江省电力公司电力科学研究院 | 一种基于业务及数据量控制的优先级调度方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021238153A1 (zh) * | 2020-05-28 | 2021-12-02 | 苏州大学 | 一种嵌入式实时操作的线程时间管理方法及装置 |
CN112000455A (zh) * | 2020-09-10 | 2020-11-27 | 华云数据控股集团有限公司 | 一种多线程任务处理方法、装置及电子设备 |
CN112217990A (zh) * | 2020-09-27 | 2021-01-12 | 北京小米移动软件有限公司 | 任务调度方法、任务调度装置及存储介质 |
CN112217990B (zh) * | 2020-09-27 | 2024-04-09 | 北京小米移动软件有限公司 | 任务调度方法、任务调度装置及存储介质 |
CN112328392A (zh) * | 2020-10-27 | 2021-02-05 | 金蝶软件(中国)有限公司 | 一种数据处理方法及相关设备 |
CN112328392B (zh) * | 2020-10-27 | 2024-05-28 | 金蝶软件(中国)有限公司 | 一种数据处理方法及相关设备 |
CN112363812A (zh) * | 2020-11-17 | 2021-02-12 | 浪潮云信息技术股份公司 | 基于任务分类的数据库连接队列管理方法及存储介质 |
CN113159957A (zh) * | 2021-05-17 | 2021-07-23 | 深圳前海微众银行股份有限公司 | 一种交易处理方法及装置 |
CN113641517A (zh) * | 2021-08-10 | 2021-11-12 | 平安科技(深圳)有限公司 | 业务数据的发送方法、装置、计算机设备和存储介质 |
CN113641517B (zh) * | 2021-08-10 | 2023-08-29 | 平安科技(深圳)有限公司 | 业务数据的发送方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110837401A (zh) | 一种java线程池分级处理方法和装置 | |
US7036123B2 (en) | System using fair-share scheduling technique to schedule processes within each processor set based on the number of shares assigned to each process group | |
US9645856B2 (en) | Resource health based scheduling of workload tasks | |
US7080379B2 (en) | Multiprocessor load balancing system for prioritizing threads and assigning threads into one of a plurality of run queues based on a priority band and a current load of the run queue | |
US10754706B1 (en) | Task scheduling for multiprocessor systems | |
CA2780231C (en) | Goal oriented performance management of workload utilizing accelerators | |
Goel et al. | A comparative study of cpu scheduling algorithms | |
CN111176852A (zh) | 资源分配方法、装置、芯片及计算机可读存储介质 | |
KR101350755B1 (ko) | 클라우드 컴퓨팅에서 다중 워크플로우를 위한 비용기반 스케줄링 방법 및 그 시스템 | |
Potluri et al. | Optimization model for QoS based task scheduling in cloud computing environment | |
US10778807B2 (en) | Scheduling cluster resources to a job based on its type, particular scheduling algorithm,and resource availability in a particular resource stability sub-levels | |
CN110231991B (zh) | 一种任务分配方法、装置、电子设备及可读存储介质 | |
CN111104210A (zh) | 一种任务处理方法、装置及计算机系统 | |
Bernat et al. | Multiple servers and capacity sharing for implementing flexible scheduling | |
CN113127171A (zh) | 用于任务分配系统中的行为配对的技术 | |
US8090903B2 (en) | Fair and dynamic disk input/output bandwidth distribution | |
CN116149821A (zh) | 一种集群多任务滑窗调度处理方法、系统、设备及介质 | |
Hameed et al. | Resource management in operating systems-a survey of scheduling algorithms | |
CN110888726A (zh) | 一种多任务并发处理方法及系统 | |
CN115640113A (zh) | 多平面弹性调度方法 | |
CN107634978B (zh) | 一种资源调度方法及装置 | |
Hsiao et al. | A usage-aware scheduler for improving MapReduce performance in heterogeneous environments | |
CN111008146A (zh) | 对云主机安全进行测试的方法及系统 | |
CN110750350A (zh) | 一种大资源调度方法、系统、装置及可读存储介质 | |
CN112073498B (zh) | 一种资源分配方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200225 |