CN111857987B - 一种基于icm的异常任务处理方法及装置 - Google Patents
一种基于icm的异常任务处理方法及装置 Download PDFInfo
- Publication number
- CN111857987B CN111857987B CN202010564552.0A CN202010564552A CN111857987B CN 111857987 B CN111857987 B CN 111857987B CN 202010564552 A CN202010564552 A CN 202010564552A CN 111857987 B CN111857987 B CN 111857987B
- Authority
- CN
- China
- Prior art keywords
- thread pool
- asynchronous
- tasks
- task
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 10
- 230000002159 abnormal effect Effects 0.000 title abstract description 22
- 238000012544 monitoring process Methods 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 27
- 238000000034 method Methods 0.000 claims description 19
- 230000001360 synchronised effect Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000015654 memory Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002035 prolonged 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出了一种基于ICM的异常任务处理方法,包括:创建第一线程池,用于执行系统中所有异步任务;创建第二线程池,用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行,本发明还提出了一种基于ICM的异常任务处理装置,有效的提高了ICM系统异步任务管理框架中异步任务的有效管理,保证了异常的异步任务可以正常执行。
Description
技术领域
本发明涉及任务处理领域,尤其是涉及一种基于ICM(浪潮云海管理平台)的异常任务处理方法及装置。
背景技术
在ICM(浪潮云海管理平台)系统设计中,处理功能逻辑的过程,往往涉及到异步(调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数)任务的调用。
现有技术中,jdk(Java开发工具包)已经提供了异步线程池(一种线程使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能,而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价,线程池不仅能够保证内核的充分利用,还能防止过分调度,可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets(编程接口)等的数量,例如,线程数一般取cpu数量+2比较合适,线程数过多会导致额外的线程切换),以达到异步处理的效果,也有一些方案实现了针对的异步任务的处理方案,包括调度,查询等。
但是目前的方案中更多的关注的是任务的正常执行,往往忽视掉任务异常情况的处理:如已提交异步任务,此时系统挂掉了,如何处理?提交的任务一直在执行中,如何处理?不利于ICM(浪潮云海管理平台)系统异步任务管理框架中异步任务的正常有效管理。
发明内容
本发明为了解决现有技术中存在的问题,创新提出了一种基于ICM的异常任务处理方法及装置,有效解决由于现有线程池中异步任务异常造成ICM系统异步任务管理框架中异步任务无法正常有效管理的问题,有效的提高了ICM系统异步任务管理框架中异步任务的有效管理,保证了异常的异步任务可以正常执行。
本发明第一方面提供了一种基于ICM的异常任务处理方法,包括:
创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
可选地,所述第一线程池中的最大线程与核心线程大小相同。
可选地,所述创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务具体包括:
判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;
如果第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程,由第一线程池执行系统重启前的未执行完成的异步任务;如果第一线程池中系统重启前的未执行完成的异步任务总数超过第一线程池的最大线程,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成。
进一步地,所述创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务具体还包括:
根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
监控第二线程池中已调度但未完成的异步任务的执行时间,如果第二线程池中已调度但未完成的异步任务超过第一时间周期,则设置为失败状态,并重新创建对应异步任务执行;
直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池。
可选地,还包括:在第一线程池以及第二线程池中均设置缓存队列,所述缓存队列用于存放暂时添加失败的任务。
进一步地,还包括:
创建第三线程池,所述第三线程池用于第一线程池以及第二线程池中异步任务的回调。
可选地,所述第二线程池的队列为同步队列。
本发明第二方面提供了一种基于ICM的异常任务处理装置,包括:
第一创建模块,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
第二创建模块,创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
第一监控模块,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
可选地,第二创建模块具体包括:
判断子模块,判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;
第一异步任务处理子模块,如果第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程,由第一线程池执行系统重启前的未执行完成的异步任务;如果第一线程池中系统重启前的未执行完成的异步任务总数超过第一线程池的最大线程,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成。
进一步地,第二创建模块还包括:
查找加入子模块,根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
第二监控子模块,监控第二线程池中已调度但未完成的异步任务的执行时间,如果第二线程池中已调度但未完成的异步任务超过第一时间周期,则设置为失败状态,并重新创建对应异步任务执行;
关闭子模块,直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池。
本发明采用的技术方案包括以下技术效果:
1、本发明有效解决由于现有线程池中异步任务异常造成ICM系统异步任务管理框架中异步任务无法正常有效管理的问题,有效的提高了ICM系统异步任务管理框架中异步任务的有效管理,保证了异常的异步任务可以正常执行。
2、本发明通过第二线程池的设置,有效执行系统崩溃重启前异步任务的处理,保证了异常的异步任务可以正常执行。
3、本发明技术方案通过任务超时设置以及回调线程池对于第一线程池以及第二线程池中异步任务的监控,有效的避免了系统中任务的大量积压,提高了任务的处理效率。
4、本发明技术方案中在第一线程池以及第二线程池中均设置缓存队列,有效的避免了系统中任务添加不成功一直重复添加造成进程缓慢的问题,提高了任务的处理效率。
5、本发明技术方案中第二线程池的队列为同步队列,所有第二线程池中异步任务同步进行,避免了任务的积压,提高了异常异步任务的处理效率。
应当理解的是以上的一般描述以及后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
为了更清楚说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见的,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明方案中实施例一方法的流程示意图;
图2为本发明方案中实施例一方法中步骤S2的一流程示意图;
图3为本发明方案中实施例一方法中步骤S2的另一流程示意图;
图4为本发明方案中实施例二方法流程示意图;
图5为本发明方案中实施例三方法的流程示意图;
图6为本发明方案中实施例四装置的结构示意图;
图7为本发明方案中实施例四装置中第二创建模块的一结构示意图;
图8为本发明方案中实施例四装置中第二创建模块的一结构示意图。
具体实施方式
为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
实施例一
如图1所示,本发明提供了一种基于ICM的异常任务处理方法,包括:
S1,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
S2,创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
S3,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间;
S4,判断第一线程池以及第二线程池中异步任务超过第一时间周期,如果判断结果为是,则执行步骤S5;如果判断结果为否,则执行步骤S6;
S5,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行;
S6,继续监控第一线程池以及第二线程池中异步任务的执行时间,并执行步骤S4。
在异步任务的调度或执行中,调度系统本身可能存在不可预知的错误,影响任务的执行;异步任务是用来调度某条任务的,所以同时应考虑到某条任务的执行过程中,也可能存在不预知的异常,这些异常情况往往包含以下场景:
异步任务已在调度池中准备调度,此时遭遇系统崩溃重启;
异步任务已被调度在执行中但尚未完成,此时遭遇系统重启;
任务已被调度,但是无超时处理,一直占用资源在执行中;
为了解决这些异常异步任务问题,在步骤S1中,重新设置第一线程池,第一线程池即为原线程池,第一线程池规格具体可以是:
itask.asyn.pool.queueSize队列大小,默认300,原则上无最大限制,可以根据实际情况灵活调整;
itask.asyn.pool.coreSize核心线程大小,默认20,最大不要超过1000,也可以根据实际情况进行调整;
itask.asyn.pool.maxSize最大线程大小,默认20,最大不要超过1000,与核心线程大小相同。
另外如果考虑任务优先级,核心线程设置要等于最大线程,如不考虑,核心线程可不等于最大线程。线程池队列采用优先级队列,如果设置最大线程与核心线程不相同,默认破坏了优先级,因为根据线程池策略,当队列(只允许在一端进行插入操作,而在另一端进行删除操作的线性表)满,且未达到最大线程时,新建线程执行,如果对新建线程赋予较高的优先级,那么便可以优于先加入队列的任务执行;线程池中的任务优先级规则:数字越大优先级越高,任务优先执行。通过对任务进行优先级的设定,可以赋予不同任务不同的优先级,使得紧急重要的任务优先执行,保证了线程池中不同任务的有效进行。
在步骤S2中,如图2所示,步骤S2具体包括:
S21,判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;如果判断结果为是,则执行步骤S22;如果判断结果为否,则执行步骤S23;
S22,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成;
S23,由第一线程池执行系统重启前的未执行完成的异步任务。
进一步地,如图3所示,步骤S2还包括:
S24,根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
S25,监控第二线程池中已调度但未完成的异步任务的执行时间,判断第二线程池中已调度但未完成的异步任务是否超过第一时间周期,如果判断结果为是,则执行步骤S26;如果判断结果为否,则执行步骤S25;
S26,则设置为失败状态,并重新创建对应异步任务执行;
S27,继续监控第二线程池中已调度但未完成的异步任务的执行时间,一直到该项异步任务执行完成;
S28,依次循环,直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池。
在步骤S2中,第二线程池为重启线程池,执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务。具体是在第一线程池中设置如果第一线程池遇到重启时,未被调度以及已调度但未完成的异步任务默认重新启动第二线程池执行,命令可以如下:itask.asyn.pool.initNewPool。第二线程池规格可以是:核心线程为0,最大线程300,与第一线程池中最大线程大小相同,队列为同步队列(SynchronousQueue),同步队列直接提交任务,大小为0。
第二线程池与第一线程池并无联系,启动的原因是为了不影响第一线程池后续任务的执行,在第一线程池遭遇重启时,必然囤积了部分任务未执行,如果使用第一线程池去执行的话,势必占用第一线程池资源,影响后续任务加入执行。第二线程池的工作仅仅为了执行上次囤积的任务,执行完后,第二线程池会自动关闭。对于此线程池是否创建完全取决于业务所需,比如假如系统中任务数量不多(即第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程),用户对于后续任务的执行时间无要求,此时即不需要创建,借助第一线程池完成囤积任务执行。
本发明通过第二线程池的设置,有效执行系统崩溃重启前异步任务的处理,保证了异常的异步任务可以正常执行,第二线程池的队列为同步队列,所有第二线程池中异步任务同步进行,避免了任务的积压,提高了异常异步任务的处理效率。
在步骤S3-S6中,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
第一线程池中异步任务的监控主要是针对第一线程池中异步任务一直无法被调度,一直维持在就绪状态或任务已被调度,但是无超时处理,一直占用资源在执行中;可以通过设置第一时间周期,第一线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行;如果未超过,则继续监控;优选地,也可以针对不同异步任务进行单独设置不同的第一时间周期,例如某一项异步任务执行周期短,则对应第一时间周期较短;如果某一项异步任务执行周期长,则对应的第一时间周期较长;也可以设置不同异步任务的统一的第一时间周期,具体可以根据实际情况进行灵活调整。
设置第一时间周期可以通过在异步任务添加时设置,任务的添加通过调用任务管理的服务接口进行添加,所需参数命名为task4Create,具体参数包括:
centerId,domainId,vdcId,region为ICM中所需,主要表示任务所属,UserSession为ICM用户信息,resourceId,任务所属资源,serviceName:任务所在的服务,classObject:任务对应的类,methodName:任务对应的方法,Object[]:任务对应参数,callBackXXX:参数为回调任务对应执行信息,TimeOut:任务超时时间,单位为秒,initExecute:设置该任务如果就绪,但遇服务重启时,下次是否重新执行,默认为是。
第二线程池中中异步任务的监控主要是第一线程池中异步任务已被调度在执行中但尚未完成,此时遭遇系统重启,监控第二线程池中已调度但未完成的异步任务的执行时间,判断第二线程池中已调度但未完成的异步任务是否超过第一时间周期,如果判断结果为是,则设置为失败状态,并重新创建对应异步任务;否则,继续进行监控。第二线程池异步任务监控是在第二线程池创建时执行,第二线程池关闭,则第二线程池异步任务监控相应结束,并且只监控第二线程池中异步任务。第一线程池中异步任务监控是一直进行,监控第一线程池所有任务是否超时,不管任务状态如何。
需要说明的是,第一线程池的第一时间周期与第二线程池的第一时间周期可以相同,也可以不同,根据实际情况进行调整,本发明在此不做限制。
本发明有效解决由于现有线程池中异步任务异常造成ICM系统异步任务管理框架中异步任务无法正常有效管理的问题,有效的提高了ICM系统异步任务管理框架中异步任务的有效管理,保证了异常的异步任务可以正常执行。
本发明通过第二线程池的设置,有效执行系统崩溃重启前异步任务的处理,保证了异常的异步任务可以正常执行。
本发明技术方案通过任务超时设置,有效的避免了系统中任务的大量积压,提高了任务的处理效率。
实施例二
如图4所示,本发明技术方案还提供了一种基于ICM的异常任务处理方法,包括:
S1,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
S2,创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
S3,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间;
S4,判断第一线程池以及第二线程池中异步任务超过第一时间周期,如果判断结果为是,则执行步骤S5;如果判断结果为否,则执行步骤S6;
S5,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行;
S6,继续监控第一线程池以及第二线程池中异步任务的执行时间,并执行步骤S4;
S7,在第一线程池以及第二线程池中均设置缓存队列,所述缓存队列用于存放暂时添加失败的任务。
异常异步任务还包括:任务添加过程中,调度系统线程池资源已耗尽,导致任务添加失败。
在这种情况下,可以通过设置缓存队列解决,当异步任务线程资源已耗尽,待有线程可用,重新执行,缓存队列为阻塞队列,大小300与第一线程池以及第二线程池队列大小相同。
添加失败任务处理:周期性检查系统中缓存队列是否有添加失败的任务,如果有,并且线程池有资源可用,再次尝试重新添加,如还是失败,就绪放入缓存队列,待有线程可用,重新执行。如果一段时间内,无失败任务,调整检查周期,适当延长检查周期。例如开始是5分钟检查一次,现在设置为10分钟。
本发明技术方案中在第一线程池以及第二线程池中均设置缓存队列,有效的避免了系统中任务添加不成功一直重复添加造成进程缓慢的问题,提高了任务的处理效率。
实施例三
如图5所示,本发明技术方案还提供了一种基于ICM的异常任务处理方法,包括:
S1,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
S2,创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
S3,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间;
S4,判断第一线程池以及第二线程池中异步任务超过第一时间周期,如果判断结果为是,则执行步骤S5;如果判断结果为否,则执行步骤S6;
S5,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行;
S6,继续监控第一线程池以及第二线程池中异步任务的执行时间,并执行步骤S4;
S7,在第一线程池以及第二线程池中均设置缓存队列,所述缓存队列用于存放暂时添加失败的任务;
S8,创建第三线程池,所述第三线程池用于第一线程池以及第二线程池中异步任务的回调。
第三线程池对第一线程池以及第二线程池中异步任务的回调,通过如下命令实现:itask.asyn.callback.enable,第三线程池规格如下:
itask.asyn.callback.poolSize回调线程池最大线程数,默认20;
回调线程池大小300,与第一线程池以及第二线程池队列大小相同。
第三线程池工作是为了完成任务的回调,不参与其他工作,对第一线程池以及第二线程池是单独监控,与第二线程池不同的是,第三线程池不会关闭,因为即使第二线程池关闭后,第一线程池任务可能一直存在回调,实现对第一线程池以及第二线程池中异步任务的监控。
实施例四
如图6所示,本发明技术方案还提供了一种基于ICM的异常任务处理装置,包括:
第一创建模块11,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
第二创建模块12,创建第二线程池,所述第二线程池用于执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务;
第一监控模块13,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
进一步地,如图7所示,第二创建模块12具体包括:
判断子模块121,判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;
第一异步任务处理子模块122,如果第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程,由第一线程池执行系统重启前的未执行完成的异步任务;如果第一线程池中系统重启前的未执行完成的异步任务总数超过第一线程池的最大线程,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成。
进一步地,如图8所示,第二创建模块12还包括:
查找加入子模块123,根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
第二监控子模块124,监控第二线程池中已调度但未完成的异步任务的执行时间,如果第二线程池中已调度但未完成的异步任务超过第一时间周期,则设置为失败状态,并重新创建对应异步任务执行;
关闭子模块125,直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池。
本发明有效解决由于现有线程池中异步任务异常造成ICM系统异步任务管理框架中异步任务无法正常有效管理的问题,有效的提高了ICM系统异步任务管理框架中异步任务的有效管理,保证了异常的异步任务可以正常执行。
本发明通过第二线程池的设置,有效执行系统崩溃重启前异步任务的处理,保证了异常的异步任务可以正常执行。
本发明技术方案通过任务超时设置以及回调线程池对于第一线程池以及第二线程池中异步任务的监控,有效的避免了系统中任务的大量积压,提高了任务的处理效率。
本发明技术方案中在第一线程池以及第二线程池中均设置缓存队列,有效的避免了系统中任务添加不成功一直重复添加造成进程缓慢的问题,提高了任务的处理效率。
本发明技术方案中第二线程池的队列为同步队列,所有第二线程池中异步任务同步进行,避免了任务的积压,提高了异常异步任务的处理效率。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (6)
1.一种基于ICM的异常任务处理方法,其特征是,包括:
创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
创建第二线程池,所述第二线程池与第一线程池相互独立,用于通过执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务,以避免使用第一线程池执行造成占用第一线程池资源,影响第一线程池后续任务加入执行;其中,所述创建第二线程池,所述第二线程池与第一线程池相互独立,用于通过执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务,以避免使用第一线程池执行造成占用第一线程池资源,影响第一线程池后续任务加入执行具体包括:
判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;
如果第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程,由第一线程池执行系统重启前的未执行完成的异步任务;如果第一线程池中系统重启前的未执行完成的异步任务总数超过第一线程池的最大线程,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成;
根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
监控第二线程池中已调度但未完成的异步任务的执行时间,如果第二线程池中已调度但未完成的异步任务超过第一时间周期,则设置为失败状态,并重新创建对应异步任务执行;
直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池;
对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
2.根据权利要求1所述的基于ICM的异常任务处理方法,其特征是,所述第一线程池中的最大线程与核心线程大小相同。
3.根据权利要求1所述的基于ICM的异常任务处理方法,其特征是,还包括:在第一线程池以及第二线程池中均设置缓存队列,所述缓存队列用于存放暂时添加失败的任务。
4.根据权利要求3所述的基于ICM的异常任务处理方法,其特征是,还包括:创建第三线程池,所述第三线程池用于第一线程池以及第二线程池中异步任务的回调。
5.根据权利要求1所述的基于ICM的异常任务处理方法,其特征是,所述第二线程池的队列为同步队列。
6.一种基于ICM的异常任务处理装置,其特征是,包括:
第一创建模块,创建第一线程池,所述第一线程池用于执行系统中所有异步任务;
第二创建模块,创建第二线程池,所述第二线程池与第一线程池相互独立,用于通过执行系统重启前第一线程池中未被调度以及已调度但未完成的异步任务,以避免使用第一线程池执行造成占用第一线程池资源,影响第一线程池后续任务加入执行;其中,第二创建模块具体包括:
判断子模块,判断第一线程池中系统重启前的未执行完成的异步任务总数是否超过第一线程池的最大线程,其中,未执行完成的异步任务包括未调度的异步任务以及已调度但未执行完成的异步任务;
第一异步任务处理子模块,如果第一线程池中系统重启前的未执行完成的异步任务总数未超过第一线程池的最大线程,由第一线程池执行系统重启前的未执行完成的异步任务;如果第一线程池中系统重启前的未执行完成的异步任务总数超过第一线程池的最大线程,创建第二线程池,根据任务模块扫描数据库,查找第一线程池中未被调度的任务列表,依次将第一线程池中未被调度的任务列表中异步任务加入第二线程池中等待执行,直至第一线程池中未被调度的任务列表中所有异步任务处理完成;
查找加入子模块,根据任务模块扫描数据库,查找已调度但未完成的异步任务列表,依次将第一线程池中已调度但未完成的异步任务列表中异步任务加入第二线程池中等待执行;
第二监控子模块,监控第二线程池中已调度但未完成的异步任务的执行时间,如果第二线程池中已调度但未完成的异步任务超过第一时间周期,则设置为失败状态,并重新创建对应异步任务执行;
关闭子模块,直至第二线程池中已调度但未完成的异步任务列表中所有异步任务处理完成后,关闭第二线程池;
第一监控模块,对第一线程池以及第二线程池中异步任务分别设置第一时间周期,分别监控第一线程池以及第二线程池中异步任务的执行时间,如果第一线程池以及第二线程池中异步任务超过第一时间周期,则将超过第一时间周期的异步任务设置为失败状态,并重新创建对应异步任务执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010564552.0A CN111857987B (zh) | 2020-06-19 | 2020-06-19 | 一种基于icm的异常任务处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010564552.0A CN111857987B (zh) | 2020-06-19 | 2020-06-19 | 一种基于icm的异常任务处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111857987A CN111857987A (zh) | 2020-10-30 |
CN111857987B true CN111857987B (zh) | 2023-03-24 |
Family
ID=72987684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010564552.0A Active CN111857987B (zh) | 2020-06-19 | 2020-06-19 | 一种基于icm的异常任务处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111857987B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116909718A (zh) * | 2023-09-13 | 2023-10-20 | 北京谷器数据科技有限公司 | 一种基于线程等待和异步报工的并行计算方法 |
CN117056056A (zh) * | 2023-10-10 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 任务执行方法和装置、存储介质及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN110096344A (zh) * | 2018-01-29 | 2019-08-06 | 北京京东尚科信息技术有限公司 | 任务管理方法、系统、服务器集群和计算机可读介质 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
CN111078377A (zh) * | 2019-11-29 | 2020-04-28 | 广州易方信息科技股份有限公司 | 一种线程工作方法 |
-
2020
- 2020-06-19 CN CN202010564552.0A patent/CN111857987B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN110096344A (zh) * | 2018-01-29 | 2019-08-06 | 北京京东尚科信息技术有限公司 | 任务管理方法、系统、服务器集群和计算机可读介质 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
CN111078377A (zh) * | 2019-11-29 | 2020-04-28 | 广州易方信息科技股份有限公司 | 一种线程工作方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111857987A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
CN111857987B (zh) | 一种基于icm的异常任务处理方法及装置 | |
CA3168286A1 (en) | Data flow processing method and system | |
CN110888719A (zh) | 一种基于web服务的分布式任务调度系统及方法 | |
CN111427751B (zh) | 基于异步处理机制对业务进行处理的方法及系统 | |
CN109660569B (zh) | 一种多任务并发执行方法、存储介质、设备及系统 | |
RU2009139312A (ru) | Способ устранения исключительной ситуации в одном из ядер многоядерной системы | |
CN111142943A (zh) | 自动控制并发方法及装置 | |
CN111176806A (zh) | 一种业务处理方法、装置及计算机可读存储介质 | |
CN113535362A (zh) | 一种分布式调度系统架构和微服务工作流调度方法 | |
WO2016177081A1 (zh) | 通知消息处理方法及装置 | |
CN111984402A (zh) | 一种线程池统一调度监控方法及系统 | |
CN114816709A (zh) | 任务调度方法、装置、服务器及可读存储介质 | |
CN111767125B (zh) | 任务执行方法、装置、电子设备、存储介质 | |
CN117290103A (zh) | 一种支持多进程和多线程的任务调度实现方法 | |
CN112346836A (zh) | 共享计算资源的抢占方法、装置、用户设备及存储介质 | |
CN115904650A (zh) | Linux系统下的定时任务监管方法及装置 | |
CN104360913B (zh) | 用于计算机操作系统的监控模块 | |
CN114385227A (zh) | 一种业务处理方法、装置、设备及存储介质 | |
CN113434280A (zh) | 基于时间动态调整调度间隔的方法 | |
JP7000797B2 (ja) | 起動管理装置、起動管理システム、起動管理方法、および、起動管理プログラム | |
CN112860391A (zh) | 一种动态集群渲染资源管理系统及方法 | |
CN111177232A (zh) | 一种数据处理方法、装置、系统和存储介质 | |
CN111026809A (zh) | 一种调度流程分布式执行系统 | |
CN111625270A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |