CN111679895A - 分布式定时任务的执行方法、装置、设备及可读存储介质 - Google Patents
分布式定时任务的执行方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN111679895A CN111679895A CN202010348313.1A CN202010348313A CN111679895A CN 111679895 A CN111679895 A CN 111679895A CN 202010348313 A CN202010348313 A CN 202010348313A CN 111679895 A CN111679895 A CN 111679895A
- Authority
- CN
- China
- Prior art keywords
- task
- application program
- preset
- compensation
- timing
- 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
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/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
-
- 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/5011—Pool
-
- 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/5021—Priority
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及数据处理技术领域,提供了一种分布式定时任务的执行方法、装置、计算机设备及计算机可读存储介质,包括:接收应用程序的启动指令,基于启动指令运行应用程序,并获取应用程序的运行时刻;基于预置分布式锁,根据应用程序的运行时刻获取应用程序的key值和/或任务时长范围;基于应用程序的第一预置常驻线程,获取与key值对应的补偿任务和/或与任务时长范围对应的定时任务;将补偿任务和/或定时任务插入预置队列线性表中;若确定预置队列线性表中补偿任务和/或定时任满足执行条件时,则通过预置线程池中的任务线程执行补偿任务和/或定时任务,避免了定时任务的丢失的情况,并同时执行多个定时任务,提高了执行定时任务的效率。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种分布式定时任务的执行方法、装置、计算机设备及计算机可读存储介质。
背景技术
在Web应用中,多数应用都有任务调度或定时任务执行的功能。随着软件架构的发展,提出了分布式解决方案,该方案将软件功能进行垂直拆分为多个模块进行部署,各个模块有不同的功能,也细化了应用程序的功能模块,同时减轻了服务器的负担,用了分布式拆分后,就相当于把一个应用程序的多个功能分配到多台服务器上去处理了。这样一来,每一台服务器负责自己的模块业务,不会受到其他业务的影响。
现如今,将定时任务的功能单独作为一个模块部署在某机器上,该机器的所有资源全部为定时任务服务,不仅提高了可靠性,还能对定时任务做更加细粒度的控制(可以随时启停该服务,或者当待执行定时任务数据量过大时对该模块单独进行集群部署)。但在分布式下执行定时任务,会存在多实例竞争数据的问题,易导致漏执行的定时任务,且通过加分布式锁来执行各个实例的定时任务,但在某一个时刻有多个任务时只能执行一个实例定时任务,所有任务串行执行,导致执行效率低。
发明内容
本申请的主要目的在于提供一种分布式定时任务的执行方法、装置、计算机设备及计算机可读存储介质,旨在在分布式下执行定时任务,会存在多实例竞争数据的问题,易导致漏执行的定时任务,且通过加分布式锁来执行各个实例的定时任务,但在某一个时刻有多个任务时只能执行一个实例定时任务,所有任务串行执行,导致执行效率低的技术问题。
第一方面,本申请提供一种分布式定时任务的执行方法,所述分布式定时任务的执行方法包括以下步骤:
接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
将所述补偿任务和/或所述定时任务插入预置队列线性表中;
若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
第二方面,本申请还提供一种分布式定时任务的执行装置,所述分布式定时任务的执行装置包括:
接收获取模块,用于接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
第一获取模块,用于基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
第二获取模块,用于基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
插入模块,用于将所述补偿任务和/或所述定时任务插入预置队列线性表中
执行模块,用于若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
第三方面,本申请还提供一种计算机设备,所述计算机设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的计算机程序,其中所述计算机程序被所述处理器执行时,实现如上述的分布式定时任务的执行方法的步骤。
第四方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其中所述计算机程序被处理器执行时,实现如上述的分布式定时任务的执行方法的步骤。
本申请提供一种分布式定时任务的执行方法、装置、计算机设备及计算机可读存储介质,通过接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;将所述补偿任务和/或所述定时任务插入预置队列线性表中;若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务,避免了定时任务的丢失的情况,并同时执行多个定时任务,提高了执行定时任务的效率。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种分布式定时任务的执行方法的流程示意图;
图2为图1中的分布式定时任务的执行方法的子步骤流程示意图;
图3为图1中的分布式定时任务的执行方法的子步骤流程示意图;
图4为本申请实施例提供的另一种分布式定时任务的执行方法的流程示意图;
图5为本申请实施例提供的一种分布式定时任务的执行装置的示意性框图;
图6为本申请一实施例涉及的计算机设备的结构示意框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。
本申请实施例提供一种分布式定时任务的执行方法、装置、计算机设备及计算机可读存储介质。其中,该分布式定时任务的执行方法可应用于终端设备中,该终端设备可以手机、平板电脑、笔记本电脑、台式电脑等电子设备。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参照图1,图1为本申请的实施例提供的一种分布式定时任务的执行方法的流程示意图。
如图1所示,该分布式定时任务的执行方法包括步骤S101至步骤S105。
步骤S101、接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻。
接收应用程序的启动指令,通过启动指令运行对应的应用程序,并获取启动指令中携带应用程序的启动时刻,将启动时刻作为应用程序的运行时刻。也可以是接收用户输入的启动指令,记录接收应用程序启动指令的时刻,将接收到启动指令的时刻作为应用程序的运行时刻。
具体地,当接收到多个应用程序的启动指令,基于各个应用程序对应的启动指令运行应用程序,并获取多个应用程序的运行时刻。
在一实施例中,接收用户输入第一应用程序和第二应用程序的启动指令,通过该启动指令分别运行第一应用程序和第二应用程序,并获取第一应用程序的运行时刻和第二应用程序的运行时刻。获取方式为在同一时刻接收到第一应用程序和第二应用程序的启动指令时,记录接收到启动指令的时刻,将接收到启动指令的时刻作为第一应用程序的运行时刻和第二应用程序的运行时刻。
例如,终端在2019-08-01-12:10:00接收到第一应用程序和第二应用程序的启动指令时,将2019-08-01-12:10:00作为第一应用程序和第二应用程序的启动时刻。或者,在不同时刻接收第一应用程序的和第二应用程序的启动指令,分别记录接收第一应用程序启动指令的时刻,以及接收第二应用程序启动指令的时刻,将接收第一应用程序启动指令的时刻作为第一应用程序的运行时刻,将接收第二应用程序启动指令的时刻作为第二应用程序的运行时刻,其中,应用程序的数量为多个,对此数量不做限定。
步骤S102、基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围。
预置分布式锁包括预置补偿查询分布式锁和预置轮询分布式锁,预置补偿查询分布式锁根据应用程序的运行时刻,确定该应用程序的key值。示例性的,获取到应用程序的运行时刻时,获取预置补偿查询分布式锁的时长粒度,通过预置公式计算出应用程序的变量a。
例如,获取到应用程序的运行时刻为2019-08-01-12:25,时长粒度t_interval为10,通过预置公式a=currenetMinute/t_interval,其中,currenetMinute为运行时刻,t_interval为时长粒度。
例如,a=25/10,计算出变量a为2,其中,去掉小数点,保留整数。在获取到变量a,将获取到的变量代入预置公式key:yyyy-MM-dd-HH_{a}中,确定应用程序的key值。其中,yyyy为年,MM为月,dd为日,HH时钟,如2019-8-1-12:20。当确定预置补偿查询分布式锁对应用程序进行加锁,则获取该应用程序的key值。
当确定预置轮询分布式锁对该应用程序进行加锁,获取当前的时刻信息,通过预置轮询分布式锁的时长,计算出预置轮询分布式锁的起始时刻key值和终始时刻key值,根据预置轮询分布式锁的起始时刻key值和终始时刻key值,获取应用程序的任务时长范围。
示例性的,预置轮询分布式锁的起始时刻key值:yyyy-MM-dd-HH-{b1}和终始时刻key值:yyyy-MM-dd-HH-{b2},且满足预置公式t_interval=b2-b1。若获取当前时刻是2019-08-01-12:25,时长t_interval为10,则得到b1=25/t_interval=2,通过公式t_interval=b2-b1,得到b2=8,将b1代入到起始时刻key值:yyyy-MM-dd-HH-{b1}中,得到起始时刻key值为2019-08-01-12-{20},将b2代入到终始时刻key值:yyyy-MM-dd-HH-{b2},得到2019-08-01-12-{80}即为2019-08-01-13-{20}。通过2019-08-01-12-{20}和2019-08-01-13-{20},获取任务时长范围为2019-08-01-12-{20}至2019-08-01-13-{20}。
在一实施例中,如图2所示,步骤S102包括子步骤S1021至S1023。
子步骤S1021、根据各个所述应用程序的运行时刻,通过所述预置补偿查询分布式锁确定各个所述应用程序的key值。
当获取到多个应用程序的运行时刻,通过预置补偿查询分布式锁的时长粒度和各个应用程序的运行时刻,确定各个应用程序的key值。示例性的,当检测第一应用程序和第二应用程序竞争预置补偿查询分布式锁,获取到第一应用程序的运行时刻和第二运行程序的运行时刻,以及预置补偿查询分布式锁的时长粒度,通过第一应用程序的运行时刻和时长粒度,确定第一应用程序的key值,通过第二应用程序的运行时刻和时长粒度,确定第二应用程序的key值。
子步骤S1022、在所述预置补偿查询分布式锁对各个所述应用程序进行加锁时,确定所述预置补偿查询分布式锁加锁的应用程序以及所述加锁的应用程序对应的key值。
当预置补偿查询分布式锁对第一应用程序和第二应用程序进行加锁,确定预置补偿查询分布式锁加锁的应用程序,预置补偿查询分布式锁加锁的应用程序为随机加锁,其中加锁的应用程序可以为第一应用程序或第二应用程序,若预置补偿查询分布式锁加锁的应用程序为第一应用程序,则确定第一应用程序的key值。
子步骤S1023、和/或,在预置轮询分布式锁对各个所述应用程序进行加锁时,确定所述预置轮询分布式锁加锁的应用程序以及所述应用程序的key值,以及根据所述应用程序的key值和预置时长确定所述应用程序的任务时长范围。
当第一应用程序和第二应用程序竞争预置轮询分布式锁,在预置轮询分布式锁对第一应用程序和第二应用程序进行加锁时,确定预置轮询分布式锁加锁的应用程序,若预置轮询分布式锁加锁的应用程序为第一应用程序时,确定第一应用程序的key值,根据第一应用程序的key值和预置时长,确定第一应用程序的任务时长范围,如,当确定第一应用程序的key值为2019-08-01-12-{20},预置时长为60分钟,则确定第一应用程序的任务时长范围为2019-08-01-12-{20}至2019-08-01-13-{20}。
或,当第一应用程序和第二应用程序竞争预置轮询分布式锁,在预置轮询分布式锁对第一应用程序和第二应用程序进行加锁时,确定预置轮询分布式锁加锁的应用程序,若预置轮询分布式锁加锁的应用程序为第二应用程序时,确定第二应用程序的key值,根据第二应用程序的key值和预置时长,确定第二应用程序的任务时长范围。
比如,当确定第二应用程序的key值为2019-08-01-12-{20},预置时长为60分钟,则确定第二应用程序的任务时长范围为2019-08-01-12-{20}至2019-08-01-13-{20}。
步骤S103、基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务。
通过应用程序的第一预置常驻线程,获取与应用程序的key值对应的补偿任务和与应用程序的的任务时长范围对应的定时任务;或者,获取与应用程序的key值对应的补偿任务或与应用程序的的任务时长范围对应的定时任务。每一个应用程序都有两个常驻线程即第一预置常驻线程和第二预置常驻线程,第一预置常驻线程和第二预置常驻线程伴随着应用程序的启动直到应用程序停止运行。第一预置常驻线程执行基于应用程序的运行时刻,查询该应用程序的运行时刻在预置定时任务表中对应的补偿任务和/或定时任务。其中,补偿任务为定时任务中的一种。
示范例为,当应用程序的key值为2019-08-01-12-{20}时,通过第一预置常驻线程查询预置定时任务表中该应用程序的定时任务,并获取每一个定时任务的执行时刻,当查询到执行时刻小于2019-08-01-12-{20}时,将该定时任务作为补偿任务。和/或,当获取到应用程序的执行时长范围时,通过第一预置常驻线程获取预置定时任务表中执行时刻处于执行时长范围的定时任务。
具体地,基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的key值对应的补偿任务;和/或,基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的任务时长范围对应的定时任务。
在一实施例中,若获取到第一应用程序的key值和第一应用程序的任务时长范围时,基于第一应用程序的第一预置常驻线程和预置定时任务表,第一预置常驻线程根据第一应用程序的key值查询预置定时表,确定预置定时表中定时任务的执行时刻小于第一应用程序的key值,获取该执行时刻小于第一应用程序的key值的定时任务,并将该执行时刻小于第一应用程序的key值的定时任务作为补偿任务。第一应用程序的第一预置常驻线程根据第一应用程序的任务时长范围查询预置定时任务表,确定预置定时任务表中定时任务的执行时刻处于该任务时长范围内的定时任务,获取执行时刻处于该任务时长范围内的定时任务。
或,若获取到第一应用程序的key值和二应用程序的任务时长范围时,基于第一应用程序的第一预置常驻线程和预置定时任务表,第一预置常驻线程根据第一应用程序的key值查询预置定时表,确定预置定时表中定时任务的执行时刻小于第一应用程序的key值,获取该执行时刻小于第一应用程序的key值的定时任务,并将该执行时刻小于第一应用程序的key值的定时任务作为补偿任务。基于第二应用程序的第一预置常驻线程根据第二应用程序的任务时长范围查询预置定时任务表,确定预置定时任务表中定时任务的执行时刻处于该任务时长范围内的定时任务,获取执行时刻处于该任务时长范围内的定时任务。
步骤S104、将所述补偿任务和/或所述定时任务插入预置队列线性表中。
通过应用程序的第一预置常驻线程,将获取到的补偿任务和/或定时任务插入预置队列线性表中,线性对列表是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。通过预先在数据库中设置一个线性对列表,将获取到的补偿任务和/或定时任务插入到线性对列表中。其中第一预置常驻线程插入之前获取补偿任务和/或定时任务的执行时刻,按照执行时刻的先后顺序对补偿任务和定时任务进行排列。
若获取到第一应用程序的补偿任务和第一应用程序的定时任务,通过第一应用程序的第一预置常驻线程将补偿任务和定时任务插入到预置队列线性表中
或者,若获取到第一应用程序的补偿任务和第二应用程序的定时任务,通过第一应用程序的第一预置常驻线程将补偿任务插入到预置队列线性表中,通过第二应用程序的第一预置常驻线程将定时任务插入到预置队列线性表中。
步骤S105、若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
基于应用程序的第二预置常驻线程查询预置队列线性表,确定预置队列线性表中所补偿任务和/或定时任满足执行条件。第二预置常驻线程是负责从预置队列线性表中取出任务,与当前时间进行对比,看是否到达该任务的执行时间。通过应用程序的第二线程监测队列线性表中的补偿任务和/或定时任务,将补偿任务和/或定时任务提取至预置线程池中。
当预置线程池检测到应用程序的第二预置常驻线程提交的补偿任务和/或定时任务时,通过预置线程池中的任务线程执行补偿任务和/或定时任务。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
在一实施例中,如图3所示,步骤S105包括子步骤S1051至S1053。
子步骤S1051、基于所述应用程序的第二常驻线程,确定预置队列线性表中所述补偿任务和/或所述定时任务是否满足执行条件。
通过第一应用程序的第二预置常驻线程查询预置队列线性表,将预置队列线性表中第一应用程序的补偿任务和定时任务的执行时刻与当前时刻进行对比,当补偿任务和定时任务的执行时刻小于或等于当前时刻时,确定第一应用程序的补偿任务和定时任务满足执行时刻。
或者,通过第一应用程序的第二预置常驻线程查询预置队列线性表,将预置队列线性表中第一应用程序的补偿任务的执行时刻与当前时刻进行对比,当补偿任务的执行时刻小于或等于当前时刻时,确定第一应用程序的补偿任务满足执行时刻;通过第二应用程序的第二预置常驻线程查询预置队列线性表,将预置队列线性表中第二应用程序的定时任务的执行时刻与当前时刻进行对比,当定时任务的执行时刻小于或等于当前时刻时,确定第二应用程序的定时任务满足执行时刻。
子步骤S1052、若所述补偿任务和/或所述定时任务满足执行条件,则将所述补偿任务和/或所述定时任务提交至预置线程池中。
第一应用程序的第二预置常驻线程将满足执行条件的补偿任务和定时任务提交至预置线程池中。或者,第一应用程序的第二预置常驻线程将满足执行条件的补偿任务提交至预置线程池中,或第二应用程序的第二预置常驻线程将满足执行条件的定时任务提交至预置线程池中。
子步骤S1053、通过所述预置线程池生成与所述补偿任务和/或所述定时任务的数量相同的任务线程,并基于所述任务线程执行所述补偿任务和/或所述定时任务。
通过预置线程池获取到满足执行条件的补偿任务和/或定时任务时,统计满足执行条件的补偿任务和/或定时任务的数量,并生成与满足执行条件的补偿任务和/或定时任务的数量相同数量的任务线程,通过生成的任务线程执行该补偿任务和/或定时任务。
在基于所述任务线程执行所述补偿任务和/或所述定时任务之前,还包括:当所述补偿任务和/或所述定时任务的数量大于预置线程池的目标数量时,获取未执行的所述补偿任务和/或所述定时任务,并将未执行的所述补偿任务和/或所述定时任务预存至所述预置线程池的缓存队列;在所述预置线程池销毁所述任务线程后,生成所述缓存队列中未执行的所述补偿任务和/或所述定时任务的数量相同的任务线程。
在一实施例中,当获取预置线程池统计满足执行条件的补偿任务和/或定时任务的数量时,读取预置线程池的核心池的大小,基于该核心池的大小,确定该预置线程池生成任务线程的目标数量。核心池的大小与终端分配的资源有关,终端非配的资源越多,线程池的核心池就越大。核心池:在创建了线程池后,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到核心池的大小后,就会把到达的任务放到缓存队列当中。
当统计到满足执行条件的补偿任务和/或定时任务的数量大于线程池的目标数量时,生成目标数量的任务线程执行补偿任务和/或定时任务,并标记未执行的目标执行补偿任务和/或目标定时任务,将未执行的执行补偿任务和/或定时任务存于线程池的缓存队列中,当检测到生成的任务线程执行成功或出现异常时,将生成的任务线程或出现异常的任务线程进行销毁,重新生成与未执行的执行补偿任务和/或定时任务数量相等的任务线程,执行未执行的补偿任务和/或定时任务的数量相等的任务线程。
在本申请中,通过补偿查询分布式所,在应用程序运行时,获取应用程序的补偿任务,通过轮询分布式锁,获取应用程序的定时任务,通过预置线程池生成与补偿任务和/定时任务对应的任务线程,在同一时刻执行多个定时任务,其中,补偿任务定时任务中在执行时刻未执行的定时任务。避免了定时任务的丢失的情况,并同时执行多个定时任务,提高了执行定时任务的效率。
请参照图4,图4为本申请实施例提供的另一种分布式定时任务的执行方法的流程示意图。
如图4所示,该分布式定时任务的执行方法包括步骤S201至207。
步骤S201、接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻。
接收应用程序的启动指令,通过启动指令运行对应的应用程序,并获取启动指令中携带应用程序的启动时刻,将启动时刻作为应用程序的运行时刻。也可以是接收用户输入的启动指令,记录接收应用程序启动指令的时刻,将接收到启动指令的时刻作为应用程序的运行时刻。
步骤S202、基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围。
预置分布式锁包括预置补偿查询分布式锁和预置轮询分布式锁,预置补偿查询分布式锁根据应用程序的运行时刻,确定该应用程序的key值。示例性的,获取到应用程序的运行时刻时,获取预置补偿查询分布式锁的时长粒度,通过预置公式计算出应用程序的变量a。
例如,获取到应用程序的运行时刻为2019-08-01-12:25,时长粒度t_interval为10,通过预置公式a=currenetMinute/t_interval,其中,currenetMinute为运行时刻,t_interval为时长粒度。如,a=25/10,计算出变量a为2,其中,去掉小数点,保留整数。在获取到变量a,将获取到的变量代入预置公式key:yyyy-MM-dd-HH_{a}中,确定应用程序的key值。其中,yyyy为年,MM为月,dd为日,HH时钟,如2019-8-1-12:20。当确定预置补偿查询分布式锁对应用程序进行加锁,则获取该应用程序的key值。
和/或,当确定预置轮询分布式锁对该应用程序进行加锁,获取当前的时刻信息,通过预置轮询分布式锁的时长,计算出预置轮询分布式锁的起始时刻key值和终始时刻key值,根据预置轮询分布式锁的起始时刻key值和终始时刻key值,获取应用程序的任务时长范围。
示例性的,预置轮询分布式锁的起始时刻key值:yyyy-MM-dd-HH-{b1}和终始时刻key值:yyyy-MM-dd-HH-{b2},且满足预置公式t_interval=b2-b1。若获取当前时刻是2019-08-01-12:25,时长t_interval为10,则得到b1=25/t_interval=2,通过公式t_interval=b2-b1,得到b2=8,将b1代入到起始时刻key值:yyyy-MM-dd-HH-{b1}中,得到起始时刻key值为2019-08-01-12-{20},将b2代入到终始时刻key值:yyyy-MM-dd-HH-{b2},得到2019-08-01-12-{80}即为2019-08-01-13-{20}。通过2019-08-01-12-{20}和2019-08-01-13-{20},获取任务时长范围为2019-08-01-12-{20}至2019-08-01-13-{20}。
步骤S203、基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务。
通过应用程序的第一预置常驻线程,获取与应用程序的key值对应的补偿任务和与应用程序的的任务时长范围对应的定时任务;或者,获取与应用程序的key值对应的补偿任务或与应用程序的的任务时长范围对应的定时任务。每一个应用程序都有两个常驻线程即第一预置常驻线程和第二预置常驻线程,第一预置常驻线程和第二预置常驻线程伴随着应用程序的启动直到应用程序停止运行。第一预置常驻线程执行基于应用程序的运行时刻,查询该应用程序的运行时刻在预置定时任务表中对应的补偿任务和/或定时任务。其中,补偿任务为定时任务中的一种。
示范例为,当应用程序的key值为2019-08-01-12-{20}时,通过第一预置常驻线程查询预置定时任务表中该应用程序的定时任务,并获取每一个定时任务的执行时刻,当查询到执行时刻小于2019-08-01-12-{20}时,将该定时任务作为补偿任务。和/或,当获取到应用程序的执行时长范围时,通过第一预置常驻线程获取预置定时任务表中执行时刻处于执行时长范围的定时任务。
步骤S204、将所述补偿任务和/或所述定时任务插入预置队列线性表中。
通过应用程序的第一预置常驻线程,将获取到的补偿任务和/或定时任务插入预置队列线性表中,线性对列表是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。通过预先在数据库中设置一个线性对列表,将获取到的补偿任务和/或定时任务插入到线性对列表中。其中第一预置常驻线程插入之前获取补偿任务和/或定时任务的执行时刻,按照执行时刻的先后顺序对补偿任务和定时任务进行排列。
步骤S205、若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
基于应用程序的第二预置常驻线程查询预置队列线性表,确定预置队列线性表中所补偿任务和/或定时任满足执行条件。第二预置常驻线程是负责从预置队列线性表中取出任务,与当前时间进行对比,看是否到达该任务的执行时间。通过应用程序的第二线程监测队列线性表中的补偿任务和/或定时任务,将补偿任务和/或定时任务提取至预置线程池中。
当预置线程池检测到应用程序的第二预置常驻线程提交的补偿任务和/或定时任务时,通过预置线程池中的任务线程执行补偿任务和/或定时任务。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
步骤S206、当检测到所述任务线程的异常信息时,获取所述异常信息对应的所述补偿任务和/或所述定时任务。
当检测到任务线程的异常信息时,检测的方式为,每一个任务线程在执行补偿任务和/或定时任务成功时,会发出一个标识信息,当检测到的标识信息为异常信息时,获取该异常信息对应的补偿任务和/或定时任务。例如,预先对任务线程发送的标识信息进行约定,当获取到任务线程发送的标识信息为1时,表示该任务线程执行成功,当获取到任务线程发送的标识信息为0时,表示该任务线程执行失败,即出现异常。
步骤S207、将所述补偿任务和/或所述定时任务添加至所述预置队列线性表中,并记录所述补偿任务和/或所述定时任务的执行次数。
在获取该异常信息对应的补偿任务和/或定时任务时,将获取到异常信息对应的补偿任务和/或定时任务添加至队列线性对列表中,并记录该异常信息对应的补偿任务和/或定时任务的执行次数。
在本申请中,通过补偿分布式锁和轮询分布式锁,获取应用程序的补偿任务和/或定时任务,在预置线程池中生成与补偿任务和/或定时任务对应的任务线程,在检测到任务线程执行补偿任务和/或定时任务的过程中出现异常信息,获取出现异常信息对应的补偿任务和/或定时任务,重新执行补偿任务和/或定时任务,避免了补偿任务和/或定时任务执行失败,提高执行任务的成功率。
请参照图5,图5为本申请实施例提供的一种分布式定时任务的执行装置的示意性框图。
如图5所示,该分布式定时任务的执行装置400,包括:接收获取模块401、第一获取模块402、第二获取模块403、插入模块404、执行模块405、第三获取模块406、记录模块407。
接收获取模块401,用于接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
第一获取模块402,用于基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
第二获取模块403,用于基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
插入模块404,用于将所述补偿任务和/或所述定时任务插入预置队列线性表中;
执行模块405,用于若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务;
第三获取模块406,用于当检测到所述任务线程的异常信息时,获取所述异常信息对应的所述补偿任务和/或所述定时任务;
记录模块407,用于将所述补偿任务和/或所述定时任务添加至所述预置队列线性表中,并记录所述补偿任务和/或所述定时任务的执行次数。
其中,接收获取模块401具体用于:获取到多个所述应用程序的运行时刻。
其中,第一获取模块402具体用于:
根据各个所述应用程序的运行时刻,通过所述预置补偿查询分布式锁确定各个所述应用程序的key值;
在所述预置补偿查询分布式锁对各个所述应用程序进行加锁时,确定所述预置补偿查询分布式锁加锁的应用程序以及所述加锁的应用程序对应的key值;和/或
在预置轮询分布式锁对各个所述应用程序进行加锁时,确定所述预置轮询分布式锁加锁的应用程序以及所述应用程序的key值,以及根据所述应用程序的key值和预置时长确定所述应用程序的任务时长范围。
其中,第二获取模块403具体用于:
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的key值对应的补偿任务;和/或
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的任务时长范围对应的定时任务。
其中,执行模块405具体用于:
基于所述应用程序的第二常驻线程,确定预置队列线性表中所述补偿任务和/或所述定时任务是否满足执行条件;
若所述补偿任务和/或所述定时任务满足执行条件,则将所述补偿任务和/或所述定时任务提交至预置线程池中;
通过所述预置线程池生成与所述补偿任务和/或所述定时任务的数量相同的任务线程,并基于所述任务线程执行所述补偿任务和/或所述定时任务。
其中,执行模块405具体用于:
当所述补偿任务和/或所述定时任务的数量大于预置线程池的目标数量时,获取未执行的所述补偿任务和/或所述定时任务,并将未执行的所述补偿任务和/或所述定时任务预存至所述预置线程池的缓存队列;
在所述预置线程池销毁所述任务线程后,生成所述缓存队列中未执行的所述补偿任务和/或所述定时任务的数量相同的任务线程。
需要说明的是,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和各模块及单元的具体工作过程,可以参考前述分布式定时任务的执行方法实施例中的对应过程,在此不再赘述。
上述实施例提供的装置可以实现为一种计算机程序的形式,该计算机程序可以在如图6所示的计算机设备上运行。
请参阅图6,图6为本申请实施例提供的一种计算机设备的结构示意性框图。该计算机设备为服务器。
如图6所示,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口,其中,存储器可以包括非易失性存储介质和内存储器。
非易失性存储介质可存储操作系统和计算机程序。该计算机程序包括程序指令,该程序指令被执行时,可使得处理器执行任意一种分布式定时任务的执行方法。
处理器用于提供计算和控制能力,支撑整个计算机设备的运行。
内存储器为非易失性存储介质中的计算机程序的运行提供环境,该计算机程序被处理器执行时,可使得处理器执行任意一种分布式定时任务的执行方法。
该网络接口用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
应当理解的是,处理器可以是中央处理单元(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
其中,在一个实施例中,所述处理器用于运行存储在存储器中的计算机程序,以实现如下步骤:
接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
将所述补偿任务和/或所述定时任务插入预置队列线性表中;
若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
在一个实施例中,所述处理器在获取所述应用程序的运行时刻实现时,用于实现:获取到多个所述应用程序的运行时刻。
在一个实施例中,所述处理器在实现预设分布式锁包括预置补偿查询分布式锁和预置轮询分布式锁;所述基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围时,用于实现:
根据各个所述应用程序的运行时刻,通过所述预置补偿查询分布式锁确定各个所述应用程序的key值;
在所述预置补偿查询分布式锁对各个所述应用程序进行加锁时,确定所述预置补偿查询分布式锁加锁的应用程序以及所述加锁的应用程序对应的key值;和/或
在预置轮询分布式锁对各个所述应用程序进行加锁时,确定所述预置轮询分布式锁加锁的应用程序以及所述应用程序的key值,以及根据所述应用程序的key值和预置时长确定所述应用程序的任务时长范围。
在一个实施例中,所述处理器在基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务实现时,用于实现:
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的key值对应的补偿任务;和/或
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的任务时长范围对应的定时任务。
在一个实施例中,所述处理器在实现若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务时,用于实现:
基于所述应用程序的第二常驻线程,确定预置队列线性表中所述补偿任务和/或所述定时任务是否满足执行条件;
若所述补偿任务和/或所述定时任务满足执行条件,则将所述补偿任务和/或所述定时任务提交至预置线程池中;
通过所述预置线程池生成与所述补偿任务和/或所述定时任务的数量相同的任务线程,并基于所述任务线程执行所述补偿任务和/或所述定时任务。
在一个实施例中,所述处理器在实现基于所述任务线程执行所述补偿任务和/或所述定时任务之前时,用于实现:
当所述补偿任务和/或所述定时任务的数量大于预置线程池的目标数量时,获取未执行的所述补偿任务和/或所述定时任务,并将未执行的所述补偿任务和/或所述定时任务预存至所述预置线程池的缓存队列;
在所述预置线程池销毁所述任务线程后,生成所述缓存队列中未执行的所述补偿任务和/或所述定时任务的数量相同的任务线程。
其中,在另一实施例中,所述处理器用于运行存储在存储器中的计算机程序,以实现如下步骤:
当检测到所述任务线程的异常信息时,获取所述异常信息对应的所述补偿任务和/或所述定时任务;
将所述补偿任务和/或所述定时任务添加至所述预置队列线性表中,并记录所述补偿任务和/或所述定时任务的执行次数。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序中包括程序指令,所述程序指令被执行时所实现的方法可参照本申请分布式定时任务的执行方法的各个实施例。
其中,所述计算机可读存储介质可以是前述实施例所述的计算机设备的内部存储单元,例如所述计算机设备的硬盘或内存。所述计算机可读存储介质也可以是所述计算机设备的外部存储设备,例如所述计算机设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种分布式定时任务的执行方法,其特征在于,包括:
接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
将所述补偿任务和/或所述定时任务插入预置队列线性表中;
若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
2.如权利要求1所述的分布式定时任务的执行方法,其特征在于,所述获取所述应用程序的运行时刻,包括:获取到多个所述应用程序的运行时刻。
3.如权利要求2所述的分布式定时任务的执行方法,其特征在于,所述预设分布式锁包括预置补偿查询分布式锁和预置轮询分布式锁;所述基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围,包括:
根据各个所述应用程序的运行时刻,通过所述预置补偿查询分布式锁确定各个所述应用程序的key值;
在所述预置补偿查询分布式锁对各个所述应用程序进行加锁时,确定所述预置补偿查询分布式锁加锁的应用程序以及所述加锁的应用程序对应的key值;和/或
在预置轮询分布式锁对各个所述应用程序进行加锁时,确定所述预置轮询分布式锁加锁的应用程序以及所述应用程序的key值,以及根据所述应用程序的key值和预置时长确定所述应用程序的任务时长范围。
4.如权利要求2所述的分布式定时任务的执行方法,其特征在于,所述基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务,包括:
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的key值对应的补偿任务;和/或
基于所述应用程序的第一预置常驻线程和预置定时任务表,获取所述预置定时任务表中与所述应用程序的任务时长范围对应的定时任务。
5.如权利要求1所述的分布式定时任务的执行方法,其特征在于,所述若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务,包括:
基于所述应用程序的第二常驻线程,确定预置队列线性表中所述补偿任务和/或所述定时任务是否满足执行条件;
若所述补偿任务和/或所述定时任务满足执行条件,则将所述补偿任务和/或所述定时任务提交至预置线程池中;
通过所述预置线程池生成与所述补偿任务和/或所述定时任务的数量相同的任务线程,并基于所述任务线程执行所述补偿任务和/或所述定时任务。
6.如权利要求5所述的分布式定时任务的执行方法,其特征在于,所述基于所述任务线程执行所述补偿任务和/或所述定时任务之前,还包括:
当所述补偿任务和/或所述定时任务的数量大于预置线程池的目标数量时,获取未执行的所述补偿任务和/或所述定时任务,并将未执行的所述补偿任务和/或所述定时任务预存至所述预置线程池的缓存队列;
在所述预置线程池销毁所述任务线程后,生成所述缓存队列中未执行的所述补偿任务和/或所述定时任务的数量相同的任务线程。
7.如权利要求1-6任意一项所述的分布式定时任务的执行方法,其特征在于,所述则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务之后,还包括:
当检测到所述任务线程的异常信息时,获取所述异常信息对应的所述补偿任务和/或所述定时任务;
将所述补偿任务和/或所述定时任务添加至所述预置队列线性表中,并记录所述补偿任务和/或所述定时任务的执行次数。
8.一种分布式定时任务的执行装置,其特征在于,所述分布式定时任务的执行装置包括:
接收获取模块,用于接收应用程序的启动指令,基于启动指令运行所述应用程序,并获取所述应用程序的运行时刻;
第一获取模块,用于基于预置分布式锁,根据所述应用程序的运行时刻获取所述应用程序的key值和/或任务时长范围;
第二获取模块,用于基于所述应用程序的第一预置常驻线程,获取与所述应用程序的key值对应的补偿任务和/或与所述应用程序的任务时长范围对应的定时任务;
插入模块,用于将所述补偿任务和/或所述定时任务插入预置队列线性表中
执行模块,用于若确定所述预置队列线性表中所述补偿任务和/或所述定时任满足执行条件时,则通过预置线程池中的任务线程执行所述补偿任务和/或所述定时任务。
9.一种计算机设备,其特征在于,所述计算机设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的计算机程序,其中所述计算机程序被所述处理器执行时,实现如权利要求1至7中任一项所述的分布式定时任务的执行方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,其中所述计算机程序被处理器执行时,实现如权利要求1至7中任一项所述的分布式定时任务的执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010348313.1A CN111679895A (zh) | 2020-04-27 | 2020-04-27 | 分布式定时任务的执行方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010348313.1A CN111679895A (zh) | 2020-04-27 | 2020-04-27 | 分布式定时任务的执行方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111679895A true CN111679895A (zh) | 2020-09-18 |
Family
ID=72452661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010348313.1A Pending CN111679895A (zh) | 2020-04-27 | 2020-04-27 | 分布式定时任务的执行方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111679895A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076186A (zh) * | 2021-05-07 | 2021-07-06 | 泰康保险集团股份有限公司 | 任务处理的方法、装置、电子设备和存储介质 |
CN116489230A (zh) * | 2023-06-28 | 2023-07-25 | 深圳前海环融联易信息科技服务有限公司 | 任务调度方法、装置、计算机设备及存储介质 |
-
2020
- 2020-04-27 CN CN202010348313.1A patent/CN111679895A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076186A (zh) * | 2021-05-07 | 2021-07-06 | 泰康保险集团股份有限公司 | 任务处理的方法、装置、电子设备和存储介质 |
CN113076186B (zh) * | 2021-05-07 | 2023-07-28 | 泰康保险集团股份有限公司 | 任务处理的方法、装置、电子设备和存储介质 |
CN116489230A (zh) * | 2023-06-28 | 2023-07-25 | 深圳前海环融联易信息科技服务有限公司 | 任务调度方法、装置、计算机设备及存储介质 |
CN116489230B (zh) * | 2023-06-28 | 2023-09-22 | 深圳前海环融联易信息科技服务有限公司 | 任务调度方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992356B (zh) | 区块链事务区块处理方法、电子装置及可读存储介质 | |
CN109309712B (zh) | 基于接口异步调用的数据传输方法、服务器及存储介质 | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN106503020B (zh) | 日志数据处理方法及装置 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
TWI460659B (zh) | 用於降低競爭之鎖定窗 | |
CN110633135A (zh) | 异步任务分配方法、装置、计算机设备及存储介质 | |
CN111679895A (zh) | 分布式定时任务的执行方法、装置、设备及可读存储介质 | |
CN110781196A (zh) | 区块链事务处理方法、装置、计算机设备及存储介质 | |
CN111796946A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN112445596A (zh) | 基于多线程的数据导入方法、系统及存储介质 | |
CN104932933A (zh) | 一种获取自旋锁的方法及装置 | |
CN112035255A (zh) | 线程池资源管理任务处理方法、装置、设备及存储介质 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
CN113778652A (zh) | 一种任务调度方法、装置、电子设备及存储介质 | |
CN110865877B (zh) | 一种任务请求的响应方法及设备 | |
CN109710679B (zh) | 数据抽取方法及装置 | |
CN111143080A (zh) | 一种读写锁优化方法、装置、系统及存储介质 | |
CN112306827B (zh) | 日志采集装置、方法和计算机可读存储介质 | |
CN113254223A (zh) | 一种系统重启后的资源分配方法、系统及相关组件 | |
CN110222016B (zh) | 一种文件处理方法及装置 | |
CN111930528A (zh) | 消息中间件的消息写入方法、装置、设备及可读存储介质 | |
CN109408035B (zh) | 一种业务系统的流程配置方法、存储介质和服务器 | |
CN109426563B (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 |