CN105550028B - 一种基于缓存锁的多任务时序执行方法及系统 - Google Patents
一种基于缓存锁的多任务时序执行方法及系统 Download PDFInfo
- Publication number
- CN105550028B CN105550028B CN201510985753.7A CN201510985753A CN105550028B CN 105550028 B CN105550028 B CN 105550028B CN 201510985753 A CN201510985753 A CN 201510985753A CN 105550028 B CN105550028 B CN 105550028B
- Authority
- CN
- China
- Prior art keywords
- lock
- task
- thread
- buffer
- buffer lock
- 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
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/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4831—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
- G06F9/4837—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority time dependent
-
- 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
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
本发明公开了一种基于缓存锁的多任务时序执行方法及系统,通过将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;启动M个线程去获取N个缓存锁,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M‑N;获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控;简化了多任务竞争系统中的时序控制机制,不会出现死锁等问题,带来了大大的方便。
Description
技术领域
本发明涉及多线程及多任务技术领域,尤其涉及的是一种基于缓存锁的多任务时序执行方法及系统。
背景技术
在当前移动互联网时代,终端会采用多个线程来执行多种任务。在一个有时序要求的并发系统中,通常有多个线程需要竞争执行多种任务,且这些任务的开始执行时间必须按照一定顺序进行,常用的方法是使用线程锁等技术,但这种技术使用复杂,且使用不当时会引起死锁等问题。
因此,现有技术还有待于改进和发展。
发明内容
本发明要解决的技术问题在于,提供一种基于缓存锁的多任务时序执行方法及系统,旨在解决现有技术中多任务竞争系统中的时序控制机制复杂容易引起死锁的问题。
本发明解决技术问题所采用的技术方案如下:
一种基于缓存锁的多任务时序执行方法,其中,包括:
A、将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;
B、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;
C、获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。
所述的基于缓存锁的多任务时序执行方法,其中,所述步骤B具体包括:
B1、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
B2、剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
B3、剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
所述的基于缓存锁的多任务时序执行方法,其中,所述步骤A还包括:
A1、设置监控锁的失效时间,所述失效时间大于所述多个任务中的最长执行时间。
所述的基于缓存锁的多任务时序执行方法,其中,所述步骤C具体包括:
C11、获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行步骤C13;若为否,则执行步骤C12;其中,所述第一时间小于所述失效时间;
C12、检查所述监控锁是否失效,若为是,则执行步骤C13;若为否,则返回步骤C11;
C13、删除各个缓存锁及监控锁,任务结束。
所述的基于缓存锁的多任务时序执行方法,其中,所述第一指定值为0,所述第二指定值为1。
一种基于缓存锁的多任务时序执行系统,其中,包括:
任务制定模块,用于将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;
任务执行模块,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;
任务监控模块,用于获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。
所述的基于缓存锁的多任务时序执行系统,其中,所述任务执行模块包括:
启动单元,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
获取单元,用于通过剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
执行单元,用于通过剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
所述的基于缓存锁的多任务时序执行系统,其中,所述任务制定模块包括:
时间设置单元,用于设置监控锁的失效时间,所述失效时间大于所述多个任务中的最长执行时间。
所述的基于缓存锁的多任务时序执行系统,其中,所述任务监控模块包括:
锁值检查单元,用于获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行任务结束单元;若为否,则执行失效检查单元;其中,所述第一时间小于所述失效时间;
失效检查单元,用于、检查所述监控锁是否失效,若为是,则执行任务结束单元;若为否,则返回锁值检查单元;
任务结束单元,用于删除各个缓存锁及监控锁,任务结束。
所述的基于缓存锁的多任务时序执行系统,其中,所述第一指定值为0,所述第二指定值为1。
本发明所提供的一种基于缓存锁的多任务时序执行方法及系统,有效地解决了现有技术中多任务竞争系统中的时序控制机制复杂容易引起死锁的问题,通过将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控;提供了一种借助缓存锁来按照顺序并且竞争执行任务的方案,简化了多任务竞争系统中的时序控制机制,不会出现死锁等问题,带来了大大的方便。
附图说明
图1为本发明提供的基于缓存锁的多任务时序执行方法较佳实施例的流程图。
图2为本发明提供的基于缓存锁的多任务时序执行方法应用实施例的方法流程图。
图3为本发明提供的基于缓存锁的多任务时序执行方法应用实施例的监控流程图。
图4为本发明提供的基于缓存锁的多任务时序执行系统较佳实施例的结构框图。
具体实施方式
本发明提供一种基于缓存锁的多任务时序执行方法及系统,为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1为本发明提供的基于缓存锁的多任务时序执行方法较佳实施例的流程图,如图所示,所述方法包括以下步骤:
步骤S100、将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;
步骤S200、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;
步骤S300、获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。
下面结合具体的实施例对上述步骤进行详细的描述。
在步骤S100中,步骤S100、将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数。具体来说,在一个有时序要求的并发系统中,通常有多个线程需要竞争执行多种任务,且这些任务的开始执行时间必须按照一定顺序进行。本发明是将多个任务添加到任务列表中,确定多个任务的开始执行顺序。然后依照开始执行顺序给每个任务制定对应的缓存锁,并设置N个缓存锁的值均为第一指定值;其中,N为正整数。
关于缓存锁,常见的缓存锁有基于memcached(Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载)和基于redis(Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API)缓存工具实现的,这里以memcached缓存锁的实现为例:当多个线程要竞争进行一项任务task1时,每个线程首先通过add操作向memcached中添加一个操作锁,叫lock1→0,此锁的名字叫lock1,值为0,同时设置lock1的失效时间为5s(大于task1的执行时间)。当多个线程都来add锁时,由于memcached的add操作的特性,当没有lock1时,才可以add成功,所以,只会有一个线程会设置成功lock1,也就是只有一个线程p1可以获取缓存锁lock1,那么只有p1可以执行task1。当在多任务时序系统中时,有多个任务并且相互之间存在时序时,单个缓存锁就不能解决这个问题了,此时就需要多级缓存锁。关于任务和线程乃现有技术名词,此处不再赘述。
同时还设置一个锁mlock叫作监控锁。优选地,只有mlock有失效时间,其它缓存锁不设置失效时间。且mlock的失效时间必须大于一个任务中执行时间最长的那个。
在步骤S200中,启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N。
具体来说,每个缓存锁对应只有一个线程可获取,启动M个线程依次去获取N个缓存锁,线程数量要大于缓存锁数量。M个线程依次去获取N个缓存锁,依次获取到缓存锁的N个线程执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值。具体来说,就是获取多级缓存锁后:当任务开始调度时,首先所有线程先获取第一个缓存锁lock1,如果获取不到,则接着获取第二个缓存锁lock2,以此类推,最终如果获取不到所有缓存锁,则剩下的(M-N)个线程去获取监控锁mlock,当获取不到mlock时,放弃竞争任务,直到下次任务开始。需要说明的是第二指定值与第一指定值取值不同,用于对任务执行结果进行标识。优选地,所述第一指定值为0,所述第二指定值为1,具体可根据需要进行设置。
在步骤S300中,获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。具体来说,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N。所述监控锁用于监控是否只有每个任务只有一个线程执行,是否任务是按顺序开始执行的。所述步骤300是用来对上述步骤的执行结果进行检测的,通过监控锁能够得知多任务是否是每个任务只有一个线程执行,多任务是否是按所述开始执行顺序这样执行的。优选地,步骤S300中可以生成对应的执行日志,以供查看。
优选地,所述步骤S200具体包括:
S201、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
S202、剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
S203、剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
具体来说,就是根据多任务的开始执行顺序设置对应的多个缓存锁,多个缓存锁的顺序按照所述开始执行顺序。所有进程先去获取第一个缓存锁,由于只有一个线程可以获取缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;剩余M-1个线程去获取第二个缓存锁;依次类推,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
优选地,所述步骤S100还包括:
S101、设置监控锁的失效时间,所述失效时间大于所述多个任务中的最长执行时间。具体来说,设置监控锁mlock时,只有mlock有失效时间,其它缓存锁不设置失效时间。且mlock的失效时间必须大于一个任务中执行时间最长的那个,也就是失效时间大于多个任务中执行时间最长的任务对应的执行时间。
优选地,所述步骤S300具体包括:
S311、获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行步骤S313;若为否,则执行步骤S312;其中,所述第一时间小于所述失效时间;
S312、检查所述监控锁是否失效,若为是,则执行步骤S313;若为否,则返回步骤S311;
S313、删除各个缓存锁及监控锁,任务结束。
具体来说,当一个进程获取mlock后,则每间隔一定时间(即第一时间),间隔时间必须小于mlock的失效时间,先执行检查各个缓存锁的值是否都为1,若为是,则删除各个缓存锁及监控锁,任务结束;否则,检查所述监控锁是否失效,若失效则删除各个缓存锁及监控锁,若没有失效,则进行等待,在间隔第一时间后,继续执行步骤S311,继续判定。
以下以一应用实施例对本发明详细说明。
本发明首先搭建memcached缓存服务器,具体搭建方法可参考网上公开方法。启动memcached,指定ip和端口。确保从任务执行服务器上可以telnet到memcached服务器的11211端口。然后确定任务列表和任务开始执行的顺序: T1→T2→T3;制定各个任务的锁键名:lock1,lock2,lock3,设置它们的初始值都为0;制定监控锁mlock。然后,启动大于四个线程,开始按顺序执行任务,每个线程执行以下步骤获取缓存锁,如果获取到,则执行相应的任务,如果没获取,则去获取下一个缓存锁,如果缓存锁已经完了,则去获取监控锁,都获取失败,则返回,流程如图2。最后可查看执行日志,看看多任务是否只有每个任务只有一个线程执行,是否任务是按顺序开始执行的。
请参阅图2,图2为本发明提供的基于缓存锁的多任务时序执行方法应用实施例的方法流程图。如图所示,以三个任务为例说明如下,有T1,T2,T3三个任务,它们的开始执行顺序是:T1→T2→T3,系统中有多于三个线程来竞争执行这三个任务。现在设置按照开始执行顺序依次设置三个缓存锁:lock1,lock2,lock3,它们的值都是0,并且它们都不设置失效时间。此时设置四个线程p1,p2,p3,p4(也可设置更多线程,此处以4个线程举例说明)去依次去获取3个缓存锁lock1,lock2,lock3,及监控锁mlock,也就是p1,p2,p3,p4分别去获取lock1,lock2,lock3, mlock。具体流程如图2所示。所有线程先去获取lock1,由于每个缓存锁对应只有一个线程可获取,假设线程p1(此处p1是为举例,也可以为p2等,此处具体线程不做限制,只需有一个线程获取到第一个缓存锁lock1即可)获取到缓存锁lock1,那么线程p1执行任务T1,执行结束,设置lock1的值为1。剩余的三个线程去获取lock2,假设跑p2获取到了缓存锁lock2,那么线程p2执行任务T2,执行结束,设置lock2的值为1。剩余的二个线程去获取lock3,假设跑p3获取到了缓存锁lock3,那么线程p3执行任务T3,执行结束,设置lock3的值为1。当任务T1,T2,T3执行完后,设置对应的各自的缓存锁值为1。剩余线程p4获取监控锁mlock。这样,便实现了三个任务的顺序执行。
请继续参阅图3,图3为本发明提供的基于缓存锁的多任务时序执行方法应用实施例的监控流程图。监控任务:当一个进程获取mlock后,则每间隔一定时间,间隔时间必须小于mlock的失效时间,执行以下检查:1)确定lock1,lock2,lock3的值全为1;2)确定mlock已经失效。当检查条件1)和检查条件2)中任意一个为真,则对lock1,lock2,lock3, mlock执行delete操作,然后结束。在实际应用时,具体步骤如图3所示,先检查各个缓存锁的值是否都为1,再检查缓存锁是否失效。
本发明提供一种借助缓存锁来按照顺序并且竞争执行任务的方案,简化了多任务竞争系统中的时序控制机制,带来了大大的方便,避免了现有线程锁等技术使用复杂且使用不当时会引用死锁的问题,带来了大大的方便。
基于上述多任务时序执行方法,本发明还提供了一种种基于缓存锁的多任务时序执行系统,如图4所示,所述系统包括:
任务制定模块10,用于将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;具体如步骤S100所述;
任务执行模块20,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;具体如步骤S200所述;
任务监控模块30,用于获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控;具体如步骤S300所述。
进一步地,所述任务执行模块20包括:
启动单元,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
获取单元,用于通过剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
执行单元,用于通过剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
进一步地,所述任务制定模块10包括:
时间设置单元,用于设置监控锁的失效时间,所述失效时间大于所述多个任务中的最长执行时间。
进一步地,所述任务监控模块30包括:
锁值检查单元,用于获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行任务结束单元;若为否,则执行失效检查单元;其中,所述第一时间小于所述失效时间;
失效检查单元,用于、检查所述监控锁是否失效,若为是,则执行任务结束单元;若为否,则返回锁值检查单元;
任务结束单元,用于删除各个缓存锁及监控锁,任务结束。
进一步地,所述第一指定值为0,所述第二指定值为1。
综上所述,本发明提供的一种基于缓存锁的多任务时序执行方法及系统,通过将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控;提供了一种借助缓存锁来按照顺序并且竞争执行任务的方案,简化了多任务竞争系统中的时序控制机制,不会出现死锁等问题,带来了大大的方便。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种基于缓存锁的多任务时序执行方法,其特征在于,包括以下步骤:
A、将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;
B、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;
C、获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。
2.根据权利要求1所述的基于缓存锁的多任务时序执行方法,其特征在于,所述步骤B具体包括:
B1、启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
B2、剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
B3、剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
3.根据权利要求1所述的基于缓存锁的多任务时序执行方法,其特征在于,所述步骤A还包括:
A1、设置监控锁的失效时间,所述失效时间大于所述N个任务中的最长执行时间。
4.根据权利要求3所述的基于缓存锁的多任务时序执行方法,其特征在于,所述步骤C具体包括:
C11、获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行步骤C13;若为否,则执行步骤C12;其中,所述第一时间小于所述失效时间;
C12、检查所述监控锁是否失效,若为是,则执行步骤C13;若为否,则返回步骤C11;
C13、删除各个缓存锁及监控锁,任务结束。
5.根据权利要求1所述的基于缓存锁的多任务时序执行方法,其特征在于,所述第一指定值为0,所述第二指定值为1。
6.一种基于缓存锁的多任务时序执行系统,其特征在于,包括:
任务制定模块,用于将N个任务加入任务列表中,确定N个任务的开始执行顺序;根据N个任务的开始执行顺序依次制定对应的N个缓存锁,并设置N个缓存锁的值均为第一指定值;制定监控锁;其中,N为正整数;
任务执行模块,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,获取到缓存锁的N个线程按照所述开始执行顺序执行对应的任务,当所述任务执行完后,将对应的缓存锁的值设置为第二指定值,剩余L个线程去获取监控锁;其中,M为正整数,且M大于N+1,L=M-N;
任务监控模块,用于获取所述监控锁的线程执行监控任务,对多任务时序执行结果进行监控。
7.根据权利要求6所述的基于缓存锁的多任务时序执行系统,其特征在于,所述任务执行模块包括:
启动单元,用于启动M个线程去获取N个缓存锁,每个缓存锁只能被一个线程获取,N个缓存锁按照所述开始执行顺序依次被M个线程获取,所有线程去获取第一个缓存锁,获取到第一个缓存锁的线程执行对应的任务,执行完成后,将第一个缓存锁的值设置为第二指定值;其中,N为正整数,M为正整数,且M大于N+1;
获取单元,用于通过剩余M-1个线程去获取第二个缓存锁,获取到第二个缓存锁的线程执行对应的任务,执行完成后,将第二个缓存锁的值设置为第二指定值;
执行单元,用于通过剩余M-2个线程去获取剩余的N-2个缓存锁,直到第N个缓存锁被获取到为止,获取到第N个缓存锁的线程执行对应的任务,执行完成后,将第N个缓存锁的值设置为第二指定值,剩余L个线程去获取所述监控锁,其中,L=M-N。
8.根据权利要求6所述的基于缓存锁的多任务时序执行系统,其特征在于,所述任务制定模块包括:
时间设置单元,用于设置监控锁的失效时间,所述失效时间大于所述N个任务中的最长执行时间。
9.根据权利要求8所述的基于缓存锁的多任务时序执行系统,其特征在于,所述任务监控模块包括:
锁值检查单元,用于获取所述监控锁的线程执行监控任务,每隔第一时间检查各个缓存锁的值是否均为第二指定值,若为是,则执行任务结束单元;若为否,则执行失效检查单元;其中,所述第一时间小于所述失效时间;
失效检查单元,用于检查所述监控锁是否失效,若为是,则执行任务结束单元;若为否,则返回锁值检查单元;
任务结束单元,用于删除各个缓存锁及监控锁,任务结束。
10.根据权利要求6所述的基于缓存锁的多任务时序执行系统,其特征在于,所述第一指定值为0,所述第二指定值为1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510985753.7A CN105550028B (zh) | 2015-12-25 | 2015-12-25 | 一种基于缓存锁的多任务时序执行方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510985753.7A CN105550028B (zh) | 2015-12-25 | 2015-12-25 | 一种基于缓存锁的多任务时序执行方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105550028A CN105550028A (zh) | 2016-05-04 |
CN105550028B true CN105550028B (zh) | 2019-08-06 |
Family
ID=55829226
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510985753.7A Active CN105550028B (zh) | 2015-12-25 | 2015-12-25 | 一种基于缓存锁的多任务时序执行方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105550028B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729221B (zh) * | 2017-09-29 | 2020-12-11 | 深圳科立讯通信有限公司 | 线程间消息监控方法、装置、计算机设备和存储介质 |
CN117827390A (zh) | 2018-05-29 | 2024-04-05 | 华为技术有限公司 | 数据处理方法以及计算机设备 |
CN111752696B (zh) * | 2020-06-25 | 2023-09-12 | 武汉众邦银行股份有限公司 | 一种基于rpc及线程锁的分布式定时任务调度方法 |
CN112130973B (zh) * | 2020-08-28 | 2024-08-20 | 北京思特奇信息技术股份有限公司 | 一种多线程同步并发的方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1605987A (zh) * | 2004-11-17 | 2005-04-13 | 中兴通讯股份有限公司 | 一种多线程系统中实现实时监控各线程状态的方法 |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
US8566833B1 (en) * | 2008-03-11 | 2013-10-22 | Netapp, Inc. | Combined network and application processing in a multiprocessing environment |
CN104834506A (zh) * | 2015-05-15 | 2015-08-12 | 北京北信源软件股份有限公司 | 一种采用多线程处理业务应用的方法 |
CN104899099A (zh) * | 2015-05-26 | 2015-09-09 | 北京金和网络股份有限公司 | 一种基于线程池的任务分配方法 |
-
2015
- 2015-12-25 CN CN201510985753.7A patent/CN105550028B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1605987A (zh) * | 2004-11-17 | 2005-04-13 | 中兴通讯股份有限公司 | 一种多线程系统中实现实时监控各线程状态的方法 |
US8566833B1 (en) * | 2008-03-11 | 2013-10-22 | Netapp, Inc. | Combined network and application processing in a multiprocessing environment |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN104834506A (zh) * | 2015-05-15 | 2015-08-12 | 北京北信源软件股份有限公司 | 一种采用多线程处理业务应用的方法 |
CN104899099A (zh) * | 2015-05-26 | 2015-09-09 | 北京金和网络股份有限公司 | 一种基于线程池的任务分配方法 |
Non-Patent Citations (1)
Title |
---|
分布式计算中多队列线程池的设计与实现;黄飞龙;《科协论坛》;20130430(第4期);第95-98页 |
Also Published As
Publication number | Publication date |
---|---|
CN105550028A (zh) | 2016-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105550028B (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
Gacias et al. | Parallel machine scheduling with precedence constraints and setup times | |
CN106293950B (zh) | 一种面向集群系统的资源优化管理方法 | |
US9218210B2 (en) | Distributed processing system | |
US8458136B2 (en) | Scheduling highly parallel jobs having global interdependencies | |
Zhou et al. | Delta debugging microservice systems with parallel optimization | |
CN113220431A (zh) | 跨云的分布式数据任务调度方法、设备及存储介质 | |
Régin et al. | Parallel constraint programming | |
CN110569113A (zh) | 分布式任务的调度方法及系统、计算机可读存储介质 | |
US9563719B2 (en) | Self-monitoring object-oriented applications | |
CN111163140A (zh) | 资源获取和分配的方法、装置和计算机可读存储介质 | |
CN105049240B (zh) | 一种消息处理方法及服务器 | |
Mochalov et al. | Distributed management system for infocommunication networks based on TM Forum Framework | |
US20110185366A1 (en) | Load-balancing of processes based on inertia | |
CN109032779A (zh) | 任务处理方法、装置、计算机设备及可读存储介质 | |
Alhussian et al. | An unfair semi-greedy real-time multiprocessor scheduling algorithm | |
CN106598726A (zh) | 一种多任务管理系统及其分布式部署方法 | |
Abid et al. | Asynchronous synthesis techniques for coordinating autonomic managers in the cloud | |
Merat et al. | Artificial intelligence application for improving cyber-security acquirement | |
Rak | Performance analysis of distributed Internet system models using QPN simulation | |
CN114327906A (zh) | 批量任务的处理方法及其装置、计算机可读存储介质 | |
US11334558B2 (en) | Adaptive metadata refreshing | |
Yung et al. | Implementing TOAST, a Tool for Agile Software Project Management in Cloud Computing Environments. | |
CN113722141A (zh) | 数据任务的延迟原因确定方法、装置、电子设备及介质 | |
CN105893226A (zh) | 服务监测系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |