CN112231079B - 一种基于缓冲队列和哈希环的任务调度方法和装置 - Google Patents
一种基于缓冲队列和哈希环的任务调度方法和装置 Download PDFInfo
- Publication number
- CN112231079B CN112231079B CN202011031102.1A CN202011031102A CN112231079B CN 112231079 B CN112231079 B CN 112231079B CN 202011031102 A CN202011031102 A CN 202011031102A CN 112231079 B CN112231079 B CN 112231079B
- Authority
- CN
- China
- Prior art keywords
- task
- hash ring
- execution
- tasks
- timer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 89
- 230000015654 memory Effects 0.000 claims abstract description 252
- 238000004364 calculation method Methods 0.000 claims description 16
- 239000000284 extract Substances 0.000 claims 1
- 238000009825 accumulation Methods 0.000 abstract description 5
- 230000008569 process Effects 0.000 description 26
- 238000009826 distribution Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 238000009827 uniform distribution Methods 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000000306 component Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/505—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 load
-
- 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/5083—Techniques for rebalancing the load in a distributed system
-
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Multi Processors (AREA)
Abstract
本发明提供了一种基于缓冲队列和哈希环的任务调度方法和装置,方法包括:任务接收器接收到任务后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入缓冲队列;定时拉取线程以固定频率从缓冲队列拉取任务,由哈希环定时器基于执行频率将任务放于哈希环存储器对应槽位;哈希环定时器以固定频率转动哈希环存储器的执行指针,并取出执行指针所指槽位上已到执行时间的任务;哈希环定时器向任务接收器询问取出的任务是否已停止,如果没有停止则将任务的执行逻辑分发给异步执行器执行。本方案可将大量任务均匀分布在哈希环存储器中,避免大量任务的执行时间堆积,实现了负载均衡,利用机器CPU高效调度大量任务。
Description
【技术领域】
本发明涉及信息系统技术领域,更具体地,涉及一种基于缓冲队列和哈希环的任务调度方法和装置。
【背景技术】
目前在许多应用场景中,都需要对大批量任务进行多次调度。例如,在中长途运输业务中,地理信息系统(Geographic Information System或Geo-Information system,简写为GIS)平台需要准实地从国家车辆全球定位系统(Global Positioning System,简写为GPS)大数据平台拉取货车轨迹,从而对货车在装货和卸货期间的轨迹进行监控和行为分析。通常情况下,GIS平台需要监控的车辆在几十万级别,监控频率根据车辆运输路程长短不一,平均每秒要执行的轨迹拉取动作可达到千次。这种量级的任务调度,如果采用目前的常规手段,将大批量任务存储在数据库中,然后高频度地对数据库进行扫描进而拉取已到执行时间的任务执行,无疑会对数据库造成极大的读写压力,难以实现大批量任务的高效调度。
鉴于此,克服上述现有技术存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
目前在对大批量任务进行调度的应用场景中,通常是将所有任务存储在数据库中,然后高频度地对数据库进行扫描拉取已到执行时间的任务,对数据库造成极大的读写压力,难以实现大批量任务的高效调度。鉴于此,本发明提供了一种基于缓冲队列和哈希环的任务调度方法和装置,目的在于实现大批量任务的稳定和高效调度。
本发明通过如下技术方案达到上述目的:
一方面,本发明提供了一种基于缓冲队列和哈希环的任务调度方法,任务调度器中设有哈希环定时器和哈希环存储器,哈希环存储器中设有执行指针以及环形等间隔排列的多个槽位,执行指针转动一圈的时间与所述哈希环定时器的定时时间一致;则任务调度方法包括:
任务接收器接收到任务调度信息后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入本地的缓冲队列;
定时拉取线程以固定频率从所述缓冲队列中拉取任务,由哈希环定时器基于所述执行频率将任务放于哈希环存储器对应槽位的任务列表中;
哈希环定时器以所述固定频率转动所述哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的任务;
哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行。
优选地,如果任务没有停止,则哈希环定时器将任务的执行逻辑分发给异步执行器之后,再次将任务放回所述哈希环存储器上该任务在取出之前所在槽位的任务列表中。
优选地,所述本地缓存是任务接收器在本机设置的一个KV数据结构;则所述将任务编号和任务结束时间写入本地缓存具体为:
任务接收器为接收到的任务设置一个唯一的任务编号,并将本地缓存中KV数据结构的key设置为任务编号,value设置为对应的任务结束时间,从而实现将任务编号和任务结束时间写入本地缓存;其中,如果接收到的任务没有任务结束时间,则将value设置为空。
优选地,所述哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行,具体为:
哈希环定时器根据取出的任务对应的任务编号,去所述任务接收器的本地缓存中查询对应的任务结束时间;如果任务结束时间为空或者任务结束时间大于当前时间,表示任务没有停止,则哈希环定时器将任务的执行逻辑分发给异步执行器,由异步执行器按照所述执行逻辑执行该任务。
优选地,任务调度器中设有多个不同精度的哈希环定时器,每个哈希环定时器对应一种哈希环存储器;则所述定时拉取线程以固定频率从所述缓冲队列中拉取任务,由哈希环定时器基于所述执行频率将任务放于哈希环存储器对应槽位的任务列表中,具体为:
任务调度器启动定时拉取线程以固定频率从所述缓冲队列中拉取任务,并根据任务的执行频率判断任务应使用的哈希环定时器,判断完成后将拉取到的任务放入对应的哈希环定时器;
哈希环定时器基于任务的执行频率计算任务应放于对应哈希环存储器的槽位位置,计算完成后将任务放于对应哈希环存储器上该槽位的任务列表中。
优选地,任务调度器中设置有四个不同精度的哈希环定时器,分别为30秒哈希环定时器、60秒哈希环定时器、300秒哈希环定时器和1800秒哈希环定时器,对应四种不同的哈希环存储器;则所述根据任务的执行频率判断任务应使用的哈希环定时器具体为:
当任务的执行频率大于等于30秒小于60秒时,使用30秒哈希环定时器;当任务的执行频率大于等于60秒小于300秒时,使用60秒哈希环定时器;当任务的执行频率大于等于300秒小于1800秒时,使用300秒哈希环定时器;当任务的执行频率大于等于1800秒时,使用1800秒哈希环定时器。
优选地,在任务接收器接收到任务调度信息后,所述方法还包括:
任务接收器实时接收该任务对应的任务结束时间,并对所述本地缓存中的任务结束时间进行更新,以便在该任务下一次被调度时,根据所述本地缓存中更新后的任务结束时间判断任务是否被停止,进而确定是否执行该任务。
优选地,在任务接收器接收到任务调度信息后,所述方法还包括:
任务接收器将任务的执行频率和执行逻辑写入计算机的外部缓存中,以便在计算机重启后,任务接收器从所述外部缓存中读取任务的执行频率和执行逻辑,并写入本地的缓冲队列中。
第二方面,本发明还提供了一种基于缓冲队列和哈希环的任务调度装置,用于实现上述第一方面所述的任务调度方法,包括任务接收器和任务调度器,所述任务接收器用于接收并存储客户端发送来的任务,所述任务调度器用于根据所述任务接收器中存储的任务进行任务调度;
所述任务接收器中设有本地缓存和缓冲队列,所述本地缓存用于存放任务编号和任务结束时间,所述缓冲队列用于存放任务的执行频率和执行逻辑;
所述任务调度器中设有定时拉取线程、哈希环定时器、哈希环存储器和异步执行器,所述定时拉取线程用于以固定频率从所述缓冲队列中拉取任务至所述哈希环定时器;所述哈希环定时器用于基于执行频率将任务放于哈希环存储器对应槽位的任务列表中,并以所述固定频率转动所述哈希环存储器上的执行指针,进而取出执行指针所指槽位的任务列表中已到执行时间的任务,向所述本地缓存询问取出的任务是否已停止,如果没有停止则将任务的执行逻辑分发给异步执行器进行异步执行。
优选地,所述哈希环存储器是一个环形队列+任务列表的数据结构;
所述环形队列包括呈环形等间隔排列的多个槽位,每过一个时间间隔,哈希环存储器的执行指针从当前槽位移向下一个槽位,且所述执行指针转动一圈的时间与所述哈希环定时器的定时时间一致;其中,每个槽位处对应设置一个任务列表,用于存放该槽位上待执行的任务。
与现有技术相比,本发明的有益效果是:
本发明提供的任务调度方案中,为哈希环定时器前置一个缓冲队列来暂存任务,并按固定频率从缓冲队列中拉取任务至哈希环存储器,能够将大量任务均匀地分布在哈希环存储器中,避免了大量任务的执行时间堆积,实现了负载均衡的效果,从而充分地利用机器CPU高效调度大量任务;另外,任务被调度之后会再次被放回之前在哈希环存储器上的槽位,维持了初始状态时的均匀分布,避免由于CPU时间片抢占导致大量任务被分布到哈希环存储器上的少数槽位而导致的数据倾斜,从而保证了任务在被调度无论被调度多少次,调度器的调度效率都不会下降。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于缓冲队列和哈希环的任务调度装置的架构图;
图2为本发明实施例提供的一种基于缓冲队列和哈希环的任务调度方法流程图;
图3为采用常规技术方案导致任务聚集到哈希环上少数几个槽位的示例图;
图4为本发明实施例提供的一种任务均衡分布效果的日志截图;
图5为本发明实施例提供的一种基于缓冲队列和哈希环的任务调度具体实施流程图;
图6为本发明实施例提供的一种基于多个不同精度哈希环的任务调度方法流程图;
图7为本发明实施例提供的一种基于时间段切换的哈希环组动态适配调整方法流程图;
图8为本发明实施例提供的一种可进行哈希环切换的任务调度方法流程图;
图9为本发明实施例提供的另一种可进行哈希环切换的任务调度方法流程图;
图10为本发明实施例提供的一种哈希环存储器的切换示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
为解决传统方案中进行大批量任务调度时,需要将所有任务存储在数据库然后高频度地对数据库进行扫描拉取已到执行时间的任务,造成数据库读写压力大、难以实现大批量任务高效调度的技术问题,本发明提供了一种基于缓冲队列和哈希环的任务调度方法和装置。其中,为便于对任务调度方法的理解,本发明实施例首先对任务调度装置进行介绍。
如图1所示,本发明实施例提供的任务调度装置主要包括任务接收器和任务调度器,所述任务接收器用于接收并存储客户端发送来的任务信息,包括任务的执行频率、执行逻辑和任务结束时间;所述任务调度器用于根据所述任务接收器中存储的任务进行任务调度。下面对任务接收器和任务调度器的具体结构功能展开介绍:
参考图1,所述任务接收器中设有本地缓存A和缓冲队列B。
所述本地缓存A是本地机器内存中的一个KV数据结构,用于存放任务编号和任务结束时间。具体地,所述任务接收器会为接收到的任务设置一个唯一的任务编号,然后将key设置为任务编号,value设置为对应的任务结束时间;如果接收到的任务没有任务结束时间,表示该任务会一直执行或者目前还没有收到停止该任务的请求,则将value设置为空。在一个典型的实施例中,可以选择哈希表来存储这部分信息,即哈希表的key键为任务编号,value值为对应的任务结束时间。
所述缓冲队列B也是本地机器内存中的一个数据结构,用于暂时存放接收到的任务调度信息,主要是执行频率和执行逻辑。在一个典型的实施例中,可以选择先进先出的单向队列存储这部分信息,如图1所示。其中,图1中缓冲队列B中的T1、T2、...、Tn表示的是任务编号。
其中,所述本地机器是指运行程序的机器,与远程机器相区别。远程机器指的是需要进行网络IO,在本方案中如果使用远程机器的缓存,由于网络IO会导致读缓存信息有明显延迟,将会对任务调度线程造成阻塞,从而影响任务调度的效率,因此本发明实施例选用本地机器的缓存。
进一步地,在优选的实施例中,为防止计算机器重启的情况下任务丢失,所述任务接收器中还可设置一外部缓存,例如图1中的数据库。所述任务接收器在接收到任务后,可以将任务调度信息写入计算机的外部缓存中,主要是任务的执行频率和执行逻辑;则在计算机重启后,可以从外部缓存中读取任务调度信息写入缓冲队列B中,从而再次启动任务的调度。
继续参考图1,所述任务调度器是整个任务调度装置的核心部件,内部主要设有定时拉取线程C、哈希环定时器D、哈希环存储器E和异步执行器F这几个组件。
所述定时拉取线程C用于以固定频率从所述任务接收器的缓冲队列B中每次拉取一个任务,并将拉取的任务放至所述哈希环定时器D。
所述哈希环存储器E是一个环形队列+任务列表的数据结构,它的环形被平均分成若干等份,每一份称之为一个槽位,则所述环形队列包括呈环形等间隔排列的多个槽位(图中以设置8个槽位为例),槽位之间的间隔表示时间间隔;哈希环存储器E内部的执行指针顺时针或逆时针转动,每过一个时间间隔,执行指针从当前槽位移向下一个槽位;每个槽位处对应设置一个任务列表,用于存放该槽位上待执行的一个或多个任务。其中,所述执行指针转动一圈的时间与所述哈希环定时器D的定时时间一致,且所述时间间隔与所述定时拉取线程C拉取任务的频率一致,即所述固定频率。如图1所示,圆圈表示一个环形队列,圆圈内的实箭头表示哈希环存储器E内部的执行指针,T1、T2、...、Tn、Tb对应的矩形表示一个个任务,其中任务T6和Tb处于哈希环中同一个槽位的任务列表中,T1和Tn处于同一个槽位的任务列表中,由图可知,执行指针当前指向T6、Tb所在的槽位。
所述哈希环定时器D用于基于任务的执行频率将任务放于所述哈希环存储器F对应槽位的任务列表中,并以所述固定频率顺时针或逆时针转动所述哈希环存储器F上的执行指针,进而依次取出执行指针所指槽位的任务列表中已到执行时间的任务,并向所述本地缓存A询问取出的任务是否已停止,如果没有停止则将任务的执行逻辑分发给所述异步执行器F进行异步执行。其中,所述哈希环定时器D内有一个定时执行线程,负责按所述固定频率从所述哈希环存储器F中扫描任务,扫描频率与所述哈希环存储器E中槽位间隔表示的时间一致。
进一步地,如果任务没有停止,所述哈希环定时器D在将任务分发给异步执行器F之后,还可将任务再次放回所述哈希环存储器E上该任务在取出之前所在槽位的任务列表中,则下次到执行时间时(即所述哈希环存储器E上执行指针转动一圈或多圈后),可直接从所述哈希环存储器E的对应槽位上调度执行。因此,为满足调度需求,在优选的实施例中,所述哈希环存储器E上执行指针转动一圈所需的时间应≤任务的执行频率。
所述异步执行器F用于执行所述哈希环定时器D分发过来的任务,通过异步线程来执行任务,不会阻塞所述哈希环定时器D的主逻辑。在一个典型的实施例中,所述异步执行器F可以使用线程池等技术实现,但并不唯一限定。
进一步地,根据精度需要,所述任务调度器中可设置多个不同精度的哈希环定时器。例如,在一个具体的实施例中,可设置以下4种不同精度的哈希环定时器:
1)30秒哈希环定时器:此时哈希环存储器E设置512个槽位,哈希环执行指针移动一圈的时长为30秒,每过30秒/512=58毫秒将执行指针移动到下一槽位,即每两个相邻槽位之间的时间间隔为58毫秒。这种情况下,调度任务时的最大时间误差为58毫秒,同一个任务的两次调度之间的最小时间间隔为30秒,即任务的执行频率最小为30秒。
2)60秒哈希环定时器:此时哈希环存储器E设置2014个槽位,哈希环执行指针移动一圈的时长为60秒,每过60秒/1024=58毫秒将执行指针移动到下一槽位,即每两个相邻槽位之间的时间间隔为58毫秒。这种情况下,调度任务时的最大时间误差为58毫秒,同一个任务的两次调度之间的最小时间间隔为60秒,即任务的执行频率最小为60秒。
3)300秒哈希环定时器:此时哈希环存储器E设置2048个槽位,哈希环执行指针移动一圈的时长为300秒,每过300秒/1024=146毫秒将执行指针移动到下一槽位,即每两个相邻槽位之间的时间间隔为146毫秒。这种情况下,调度任务时的最大时间误差为146毫秒,同一个任务的两次调度之间的最小时间间隔为300秒,即任务的执行频率最小为300秒。
4)1800秒哈希环定时器:此时哈希环存储器E设置4096个槽位,哈希环执行指针移动一圈的时长为1800秒,每过1800秒/4096=439毫秒将执行指针移动到下一槽位,即每两个相邻槽位之间的时间间隔为439毫秒。这种情况下,调度任务时的最大时间误差为439毫秒,同一个任务的两次调度之间的最小时间间隔为1800秒,即任务的执行频率最小为1800秒。
其中,当任务的执行频率大于等于30秒小于60秒时,可选择30秒哈希环定时器;当任务的执行频率大于等于60秒小于300秒时,可选择60秒哈希环定时器;当任务的执行频率大于等于300秒小于1800秒时,可选择300秒哈希环定时器;当任务的执行频率大于等于1800秒时,可选择1800秒哈希环定时器。
如果哈希环定时器以及哈希环存储器设置数量太多,可能会导致资源占用过多。因此,在满足精度需求以及资源占用之间平衡的前提下,一般最多设置4个不同精度的哈希环定时器,如以上所述的四种。在实际使用时,可能只需要选择其中的一种或两种即可满足实际精度需求。
本发明实施例提供的上述任务调度装置中,任务接收器中为哈希环定时器前置一个缓冲队列来暂存任务,任务调度器中设置定时拉取线程按固定频率从缓冲队列中拉取任务并存放至哈希环存储器,能够将大量任务均匀地分布在哈希环存储器中,避免了大量任务的执行时间堆积,实现了负载均衡的效果,从而充分地利用机器CPU高效调度大量任务;
另外,任务被调度之后会由哈希环定时器再次被放回之前在哈希环存储器上的槽位,维持了初始状态时的均匀分布,避免由于CPU时间片抢占导致大量任务被分布到哈希环存储器上的少数槽位而导致的数据倾斜,从而保证了任务在被调度无论被调度多少次,调度器的调度效率都不会下降。
实施例2
在上述实施例1的基础上,本发明实施例提供了一种基于缓冲队列和哈希环的任务调度方法,可采用实施例1中的任务调度装置完成,如图2所示,主要包括以下步骤:
步骤101,任务接收器接收到任务调度信息后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入本地的缓冲队列。
结合图1,具体实现过程如下:客户端作为任务调度的发起方和任务信息的提供方,会按图1中编号1所示的流程,持续不断地向任务接收器发送任务调度信息,主要包括执行频率和执行逻辑,从而发起任务调度请求。其中,任务的执行频率可以是毫秒精度,也可以是更高精度,并不唯一限定;对任务的执行逻辑也没有限制,可以是短时间执行的计算逻辑也可以是比较耗时的计算逻辑。任务接收器接收到客户端发送来的任务调度信息后,为接收到的任务设置一个唯一的任务编号,例如T1、T2、...、Tn,并将key设置为任务编号,value设置为对应的任务结束时间,从而实现将任务编号和任务结束时间写入本地缓存A。然后,按图1中编号2所示的流程,任务接收器将接收到的任务调度信息写入缓冲队列B。
其中,所述任务结束时间是在客户端向任务接收器发送停止任务的请求时获取,如果接收到的任务没有任务结束时间,表示该任务会一直执行或者目前还没有收到停止该任务的请求,则可将value设置为空。而且,在任务接收器接收到任务调度信息后,所述任务接收器可实时接收客户端发送来的停止任务请求,也就是实时接收该任务对应的任务结束时间,并对所述本地缓存A中的任务结束时间进行更新,以便在该任务下一次被调度时,可以根据所述本地缓存A中更新后的任务结束时间判断任务是否停止,进而确定是否要执行该任务。通过实时接收任务接收时间并及时更新,可保证任务调度的实时性和有效性。
进一步地,在优选的实施例中,为防止计算机器重启的情况下任务丢失,在任务接收器接收到任务调度信息后,所述任务接收器还可将任务调度信息(主要是执行频率和执行逻辑)写入计算机的外部缓存中,例如图1中的数据库。在计算机重启后,任务接收器可从所述外部缓存中读取任务调度信息并写入本地的缓冲队列B中,从而再次启动任务的调度。
步骤102,定时拉取线程以固定频率从所述缓冲队列中拉取任务,由哈希环定时器基于所述执行频率将任务放于哈希环存储器对应槽位的任务列表中。
结合图1,具体实现过程如下:任务调度器启动一个定时拉取线程C,然后按图1中编号3所示的流程,以固定频率从任务接收器的所述缓冲队列B中每次拉取一个任务,并将拉取到的任务放入哈希环定时器D;然后哈希环定时器D基于任务的执行频率计算该任务应放于哈希环存储器E的槽位位置,计算完成后按图1中编号4所示的流程将任务投放到该槽位的任务列表中。其中,定时拉取线程C的拉取频率可以是毫秒级别,也可以是更长时间,在此不做具体限定,且拉取频率与下面步骤103中哈希环定时器中执行指针移动的频率相等。
例如,哈希环存储器的执行指针转动一圈为60秒,共有12个槽位,分别记为槽位1、2、...、12,则每两个槽位之间的时间间隔为5s。如果当前执行指针指在槽位1上,任务的执行频率为60s,则从当前时间(即执行指针指在槽位1上时)开始算,60s之后该任务开始第一次执行,经计算确定,该任务应该放在槽位1处,这样才可以保证执行指针转动60s(即转1圈)再次到达槽位1时,该任务恰好到执行时间,可以取出调度执行。其他任务的计算存放原则与上述方法相似,具体不再赘述。由于每个任务的执行频率不尽相同,开始计算执行频率的时间点也可能不同(因为执行指针在不断转动,每个任务在往里存放时,执行指针当前所指的槽位可能不同),因此通过上述方法存放之后,可以保证大批量的任务相对比较均匀地分布在哈希环存储器的各槽位上。
步骤103,哈希环定时器以所述固定频率转动所述哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的任务。
结合图1,所述哈希环定时器D可按照固定频率顺时针或逆时针移动所述哈希环存储器E内部的执行指针,并按图1中编号5所示的流程,从执行指针当前所指槽位的任务列表中拉取出已到执行时间的任务,即到期任务。具体地,所述哈希环定时器D中有一个定时执行线程,该线程会按照固定频率从所述哈希环存储器E中扫描任务,其扫描频率(或者说是执行指针移动的频率)与所述哈希环存储器E中的槽位间隔表示的时间一致,与步骤102中定时拉取线程C的拉取频率也一致,均为所述固定频率。例如,30秒哈希环定时器是以58毫秒的频率对所述哈希环存储器E进行扫描,此时定时拉取线程C以58毫秒的拉取频率从所述缓冲队列B中拉取任务。
其中,对于执行指针当前所指的槽位,需要依次判断该槽位对应的任务列表中的每个任务是否已到执行时间;如果到执行时间,则将对应的任务从任务列表中拉取出,直至当前槽位上已到执行时间的任务全部拉取出;然后所述哈希环定时器D将所述哈希环存储器E内的执行指针移动到下一个槽位,以便继续拉取下一个槽位的任务列表中已到执行时间的任务。以图1为例,任务T6和Tb处于同一个槽位的任务列表中;在本次执行时,所述哈希环存储器E内的执行指针指向任务T6、Tb所在的槽位,所述哈希环定时器D扫描完T6、Tb后发现T6已到执行时间,而Tb没有到执行时间,于是将T6从任务列表中取出。
需要说明的是,在执行指针转动并取出任务执行的过程中,定时拉取线程仍在以固定频率从所述缓冲队列中拉取任务,哈希环定时器将定时拉取线程拉取的任务按照计算结果存放至哈希环存储器的对应槽位上,两个过程并行执行,互不影响。
步骤104,哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行。
结合图1,具体实现过程如下:哈希环定时器D根据取出任务对应的任务编号,去所述任务接收器的本地缓存B中查询对应的任务结束时间;如果任务结束时间为空或者任务结束时间大于当前时间,表示任务没有停止,则哈希环定时器D将任务的执行逻辑分发给异步执行器,由异步执行器F按照所述执行逻辑执行该任务。继续以图1为例,所述哈希环定时器D从任务列表中取出任务T6后,按图1中编号6所示的流程,向所述任务接收器询问任务T6是否已停止;假设所述任务接收器的本地缓存A中存储的任务T6的任务结束时间大于当前时间,证明任务T6还没有结束,则按图1中编号7所示的流程,所述哈希环定时器D将任务T6分发给异步执行器E执行。
进一步地,在优选的实施例中,如果任务没有停止,则哈希环定时器在将任务的执行逻辑分发给异步执行器之后,还可将任务再次放回所述哈希环存储器上该任务在取出之前所在槽位的任务列表中。继续以图1为例,所述哈希环定时器D将任务T6分发给异步执行器E之后,按图1中编号8所示的流程,再次将任务T6放回哈希环存储器E中任务T6之前所在的槽位,即图示中虚线对应的T6’方块处;至此,执行指针当前所指槽位对应的任务列表中存储有任务Tb和T6’。然后,所述哈希环定时器D按顺时针将执行指标移向下一个槽位,即图1中虚线执行指针所指的槽位。
其中,如果查询到任务已到结束时间,表示客户端已通知任务接收器停止该任务,则所述哈希环定时器D不会再将该任务分发到异步执行器F执行,也不会将该任务再次放入哈希环存储器。
循环执行上述步骤103和步骤104,即可实现任务的多次甚至无限次调度。
在从哈希环存储器上取出任务首次执行完成后,如果不采用本方案的将任务放回之前所在槽位的方法,由于各任务在每次执行过程中可能存在延时,则原本不在同一槽位上的任务在调度执行多次后可能会堆积到同一个槽位。参考图3,是相应的任务堆积场景,图中所述哈希环存储器E环形上的虚线小圆表示在这些槽位上没有任务待执行,那么当执行指针移动到这些槽位时,由于没有任务待执行,将导致机器CPU空转。另一方面,任务T4、T6、…、Tn所在槽位有大量任务,这会导致指针移动到该槽位时,由于有大量任务要扫描和分发执行,CPU要执行的计算过多,从而导致CPU在这一时间点过于繁忙,消耗过多机器资源。
如图4所示,是本发明实施例使用30秒哈希环定时器调度229个任务的场景下,哈希环定时器运转几天之后任务在槽位上的分布状态。为对分布状态进行监控,本发明实施例将分布状态打印到了日志中,如图4。该定时器一共有512个槽位,其中0表示槽位上没有任务,1表示槽位上有1个任务,2表示槽位上有2个任务。由图4可以看出,229个任务比较均均地分布在了哈希环定时器中,没有发生图3所示的分布不均情况。
为便于说明,在上述实施例中仅使用了229个任务来展示本方案的效果,但并不用以限制本发明。实际上,在任务数量达到10万级别的情况下,本方案的效果仍然有效,在此不做赘述。
需要说明的是,本发明实施例中的任务接收器和任务调度器仅仅是为了方便说明而引入的结构名称,并不用以限制本发明。按照本发明实施例提供的上述方法对应的程序算法,所述任务接收器和任务调度器还可采用其他的虚拟模块来完成,基本算法仍可参照上述方法,在此不做具体赘述。
本发明实施例提供的上述任务调度方法中,为哈希环定时器前置一个缓冲队列来暂存任务,并由定时拉取线程按固定频率从缓冲队列中拉取任务至哈希环存储器,能够将大量任务均匀地分布在哈希环存储器中,避免了大量任务的执行时间堆积,实现了负载均衡的效果,从而充分地利用机器CPU高效调度大量任务;
另外,任务被调度之后会再次被放回之前在哈希环存储器上的槽位,维持了初始状态时的均匀分布,避免由于CPU时间片抢占导致大量任务被分布到哈希环存储器上的少数槽位而导致的数据倾斜,从而保证了任务在被调度无论被调度多少次,调度器的调度效率都不会下降。
实施例3:
结合实施例1和实施例2,本发明实施例以任务接收器采用数据库作为外部缓存、任务调度器中设置一个精度的哈希环定时器为例,进一步提供了一种基于缓冲队列和哈希环的任务调度方法的具体实施方式,如图5所示,具体包括以下步骤:
步骤201,任务接收器从客户端接收要调度的任务的执行频率和执行逻辑,如图1中编号1的流程所示。
步骤202,任务接收器将任务编号和任务结束时间写入本地缓存A。其中,所述任务编号是由任务接收器为接收到的任务生成的唯一编号,设为key;所述任务结束时间是在客户端向任务接收器发送停止任务的请求时获取,设为value;如果接收到的任务没有任务结束时间,则将value设为空。
步骤203,任务接收器将任务的执行频率和执行逻辑写入数据库,以防止计算机器重启的情况下任务丢失。在计算机重启后,任务接收器可从数据库中读取任务的执行频率和执行逻辑,再次启动任务的调度。
步骤204,任务接收器将任务的执行频率和执行逻辑写入缓冲队列B,如图1中编号2的流程所示。
步骤205,任务调度器启动定时拉取线程C以固定频率从缓冲队列B中拉取任务,并将拉取的任务放入哈希环定时器D,如图1中编号3的流程所示。
步骤206,哈希环定时器D基于执行频率计算该任务应放于哈希环存储器E的槽位位置,并将任务投放到该槽位的任务列表中,如图1中编号4的流程所示。
步骤207,哈希环定时器D扫描哈希环存储器E内的执行指针当前所指槽位上的任务列表,将该任务列表中已到执行时间的任务拉取出,如图1中编号5的流程所示。
步骤208,哈希环定时器D向任务接收器中的本地缓存A询问拉取出的任务是否已停止,如图1中编号6的流程所示,也就是基于任务编号从本地缓存A中查询对应的任务结束时间,通过任务结束时间来判断任务是否停止。如果任务没有停止,则继续执行步骤209;如果任务已停止,则跳转至步骤211。
步骤209,将任务的执行逻辑分发给异步执行器F进行异步执行,如图1中编号7的流程所示。
步骤210,哈希环定时器D将任务再次放回所述哈希环存储器E上该任务在取出之前所在槽位的任务列表中,如图1中编号8的流程所示。如此一来可维持哈希环存储器上初始状态时的均匀分布,避免由于CPU时间片抢占导致大量任务被分布到哈希环存储器上的少数槽位而导致的数据倾斜,从而保证了任务在被调度无论被调度多少次,调度器的调度效率都不会下降。
步骤211,判断哈希环存储器E内执行指针当前所指槽位上已到执行时间的任务是否已处理完;如果处理完,则继续执行步骤212;如果未处理完,额跳转至步骤207,继续从当前所指槽位的任务列表中拉取下一个已到执行时间的任务,直至拉取完。
步骤212,哈希环定时器D以所述固定频率将所述哈希环存储器内的执行指针移动到下一个槽位,并跳转至步骤207,以便继续拉取下一个槽位的任务列表中已到执行时间的任务。
按照图5所示的步骤如此循环往复,即可实现任务的多次甚至无限次调度。
实施例4
在上述实施例2和实施例3提供的任务调度方法中,是以任务调度器中仅设置一个哈希环定时器D为例。考虑到在实际使用时,需要调度的任务为大批量,而各任务对应的执行频率各不相同,且频率涉及范围可能较广,如果仅设置一个哈希环定时器,可能难以满足精度需求。例如,如果采用30秒哈希环定时器,对于执行频率在30秒到60秒之间的任务比较适用;但如果任务的执行频率为1800秒,则执行指针要转动60圈该任务才会被取出执行一次,不仅长时间占用哈希环存储器的槽位资源,而且转动圈数过多才取出执行一次可能会影响该任务的执行精度。
鉴于上述问题,本发明实施例在任务调度器中根据精度需求设置多个不同精度的哈希环定时器,进而提供了一种基于多个不同精度哈希环的任务调度方法。其中,每个哈希环定时器对应一种槽位结构的哈希环存储器,各哈希环存储器中执行指针转动一圈的时间与对应哈希环定时器的定时时间一致。与实施例2和实施例3的主要区别在于:当设置多个哈希环定时器时,定时拉取线程从所述缓冲队列中拉取任务之后,需根据任务的执行频率选择最合适的哈希环定时器,继而放入对应的哈希环存储器中,使得不同执行频率的任务均能满足精度要求。在实施例2和实施例3的基础上,如果对精度要求提高,单一的哈希环定时器和哈希环存储器已经难以满足,则可采用本发明实施例提供的任务调度方法。
如图6所示,本发明实施例提供的基于多个不同精度哈希环的任务调度方法主要包括以下步骤:
步骤301,任务接收器接收到任务调度信息后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入本地的缓冲队列。
具体实现过程可参考实施例2中的步骤101,在此不做赘述。在优选的实施例中,为防止计算机器重启的情况下任务丢失,在任务接收器接收到任务调度信息后,所述任务接收器还可将任务调度信息(主要是执行频率和执行逻辑)写入计算机的外部缓存中,例如图1中的数据库。在计算机重启后,任务接收器可从所述外部缓存中读取任务调度信息并写入本地的缓冲队列B中,从而再次启动任务的调度。
步骤302,定时拉取线程以固定频率从所述缓冲队列中拉取任务,并根据任务的执行频率选择相匹配的哈希环定时器,由该哈希环定时器将任务放于对应哈希环存储器上对应槽位的任务列表中。
由于设有多个不同精度的哈希环定时器,且多个哈希环定时器都在同步运行,则该步骤的具体实现过程如下:首先,任务调度器启动定时拉取线程C以固定频率从所述缓冲队列B中拉取任务,并根据任务的执行频率判断任务应使用的哈希环定时器;判断完成后,所述定时拉取线程根据判断结果将拉取到的任务放入对应的哈希环定时器;然后,哈希环定时器基于任务的执行频率计算任务应放于对应哈希环存储器上的槽位位置,计算完成后将任务放于对应哈希环存储器上该槽位的任务列表中。
以任务调度器中设置四个不同精度的哈希环定时器为例,分别为30秒哈希环定时器、60秒哈希环定时器、300秒哈希环定时器和1800秒哈希环定时器,每种哈希环定时器对应的哈希环存储器结构可参考实施例1,在此不做赘述。则所述根据任务的执行频率判断任务应使用的哈希环定时器具体为:当任务的执行频率大于等于30秒小于60秒时,使用30秒哈希环定时器;当任务的执行频率大于等于60秒小于300秒时,使用60秒哈希环定时器;当任务的执行频率大于等于300秒小于1800秒时,使用300秒哈希环定时器;当任务的执行频率大于等于1800秒时,使用1800秒哈希环定时器。如此一来,可根据任务的执行频率灵活选择对应的哈希环定时器,从而可最大程度地满足实际精度需求。
其中,哈希环定时器计算任务应放于对应哈希环存储器上的哪个槽位时,具体计算方法可参考实施例2,在此不做赘述。每个哈希环定时器均按照该方法进行槽位计算,将任务比较均匀地分布在对应的哈希环存储器上。
步骤303,各哈希环定时器以指定频率转动对应哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的任务。
对于不同精度的哈希环定时器,其对应的“指定频率”是不同的,即对应哈希环存储器上执行指针的转动频率是不同的,需要与对应哈希环存储器中的槽位间隔一致。具体地,每个哈希环定时器中有一个定时执行线程,该线程会按照指定频率从对应哈希环存储器中扫描任务,其扫描频率与对应哈希环存储器中的槽位间隔表示的时间一致。例如,30秒哈希环定时器是以58毫秒的频率从对应哈希环存储器中扫描任务,300秒哈希环定时器是以146毫秒的频率从对应哈希环存储器中扫描任务。
前面提到,定时拉取线程的拉取频率应该与哈希环定时器的扫描频率相同,或者说与哈希环定时器中的槽位间隔相同,这样可以保证定时拉取线程每拉取一个任务,执行指针恰好移动一个槽位,方便从执行指针当前所指槽位开始计算时间。在本发明实施例中,由于设置多个不同精度的哈希环定时器,每个哈希环定时器对应的扫描频率不同,拉取频率无法与每个哈希环定时器的扫描频率都保持一致;此时,拉取频率可以取多个哈希环定时器中的最小扫描频率。
例如,如果选用30秒哈希环定时器和300秒哈希环定时器,此时定时拉取线程C可以58毫秒的拉取频率从所述缓冲队列B中拉取任务。对于30秒哈希环定时器,拉取频率与扫描频率一致,拉取到任务并放入对应哈希环存储器时,执行指针恰好指在某个槽位,可以从当前槽位开始计算时间,并将任务放在计算出的槽位位置。对于300秒哈希环定时器,拉取频率与扫描频率不一致,确切地说,拉取频率小于扫描频率,则拉取到任务并放入对应哈希环存储器时,执行指针可能正处于两个槽位之间,此时可以从下一个槽位开始计算时间,并等待执行指针转到下一个槽位时,再将任务放在计算出的槽位位置。
步骤304,各哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行。
对于每个哈希环定时器,拉取任务执行的具体实现过程可参考实施例1中的步骤104,在此不做赘述。在优选的实施例中,如果任务没有停止,则哈希环定时器在将任务的执行逻辑分发给异步执行器之后,还可将任务再次放回对应哈希环存储器上该任务在取出之前所在槽位的任务列表中。其中,如果查询到任务已到结束时间,表示客户端已通知任务接收器停止该任务,则哈希环定时器不会再将该任务分发到异步执行器F执行,也不会将该任务再次放入对应的哈希环存储器。
循环执行上述步骤303和步骤304,即可实现任务的多次甚至无限次调度。
本发明实施例提供的上述任务调度方法中,为哈希环定时器前置一个缓冲队列来暂存任务,并由定时拉取线程按固定频率从缓冲队列中拉取任务至哈希环存储器,能够将大量任务均匀地分布在哈希环存储器中,避免了大量任务的执行时间堆积,实现了负载均衡的效果,从而充分地利用机器CPU高效调度大量任务。另外,任务调度器中设置有多个不同精度的哈希环定时器,可以根据任务的执行频率选择最相匹配的哈希环定时器来使用,从而满足不同执行频率的任务的精度需求。
在上述实施例中,以任务调度器中设置四个不同精度的哈希环定时器为例,但并不唯一限定。考虑到设置过多的哈希环定时器可能会占用太多资源,而设置过少的哈希环定时器又可能难以满足精度需求,因此,在设计任务调度器时,哈希环定时器的具体数量以及类型可根据大数据统计结果进行选择设置,具体如下:
根据任务调度的历史数据,统计历史上任务调度过程中使用次数超过某一预设值的哈希环定时器,由于大数据统计结果显示这部分哈希环定时器在历史上使用较多,可以推测在后续的任务调度过程中使用较多的概率也较大,因此可以将这部分哈希环定时器设置在任务调度器中,投入使用。也可以根据任务调度的历史数据统计各任务的执行频率,进而根据不同频率范围内的任务数量来合理设置哈希环定时器,即统计任务数量超过某一预设值的频率范围。例如,如果大部分任务的执行频率范围都在30s~60s之间以及300s~1800s之间,即这两个频率范围内的任务数量均超过某一预设值,则可以在任务调度器中设置30秒哈希环定时器和300秒哈希环定时器这两种,其余频率范围内的任务数量很少,可以无需设置对应的哈希环定时器。如此一来,既可节省资源,又可保证大部分任务的执行精度。
进一步地,由于任务调度器中哈希环定时器的数量及类型都是根据大数据统计预先设置好的,可以满足大部分任务的调度需求,但如果在本次调度过程中存在较多任务的执行频率偏离大数据,那依靠现有的哈希环定时器可能就无法满足精度要求。为解决上述问题,在步骤302中,所述定时拉取线程以固定频率从所述缓冲队列中拉取任务之后,如果根据任务的执行频率无法找到相匹配的哈希环定时器,则所述方法还包括:
根据任务的执行频率选择最接近的哈希环定时器,由该哈希环定时器将任务放于对应哈希环存储器的对应槽位,并将该任务进行标记;当带标记的任务数量超过第一预设阈值时,根据各带标记的任务的执行频率新建一个哈希环定时器以及对应的哈希环存储器,并投入使用。其中,在新建哈希环定时器时,可以统计各带标记的任务的平均执行频率,根据平均执行频率确定需要新建的哈希环定时器的定时时间,进而基于该定时时间新建哈希环定时器与哈希环存储器;也可以统计落在哪个频率范围内的任务数量最多,或者统计各带标记任务的执行频率众数,根据任务数量最多的频率范围确定需要新建的哈希环定时器的定时时间,进而新建哈希环定时器。
另外,考虑到大部分任务的执行频率应该还是比较接近大数据统计结果,执行频率偏离大数据只是少数情况,为偏离大数据的任务新建哈希环定时器之后,可能使用一段时间后新建的哈希环定时器又会变得使用较少。考虑到上述问题,在新建的哈希环定时器以及对应的哈希环存储器投入使用之后,所述方法还包括:
对于新建的哈希环定时器对应的哈希环存储器,每隔预设时间统计该哈希环存储器上待执行的任务总数;当该哈希环存储器上的任务总数小于第二预设阈值时,根据任务的执行频率将该哈希环存储器上的各任务转移到最接近的哈希环存储器上;将该新建的哈希环定时器以及对应的哈希环存储器从任务调度器中删除,退出使用;其中,所述第二预设阈值小于所述第一预设阈值。
例如,根据大数据统计后,任务调度器中设置30秒哈希环定时器和300秒哈希环定时器,但本次任务调度过程中除执行频率在30s~60s之间以及300s~1800s之间的任务数量较多以外,还存在一部分任务的执行频率在60s~300s之间,对于这部分任务60秒哈希环定时器才最适用。举例说明:如果某个任务的执行频率为90s,无法找到相匹配的哈希环定时器,但该任务仍需要先放到某个哈希环存储器中,这时可以选择最接近的哈希环定时器,即30秒哈希环定时器,先由30秒哈希环定时器将该任务放到对应的哈希环存储器上等待调度执行;同时对该任务进行标记,表示该任务无法匹配到最合适的哈希环定时器。实时统计带标记任务的数量,如果标记的任务数量较少,表示只有少数任务无法匹配到最合适的哈希环定时器,此时考虑到资源占用问题无需新建哈希环定时器;如果标记的任务数量较多,已经超过第一预设阈值(例如10),预测后续仍可能会有较多任务无法匹配到最合适的哈希环定时器,此时可根据这部分标记任务的执行频率新建合适的哈希环定时器和哈希环存储器。以计算平均执行频率为例,如果带标记任务的平均执行频率为100s,则对应哈希环定时器的定时时间应小于100s,此时可新建60秒哈希环定时器以及对应的哈希环存储器,即可满足这部分标记任务的精度需求。新建完成后,可以将带标记任务的标记删除,以免影响后续使用。
对于新建的60秒哈希环定时器,每隔预设时间(例如5min)统计对应哈希环存储器上的任务总数,当任务总数小于第二预设阈值(例如5)时,证明这种执行频率偏离大数据的任务已经较少,60秒哈希环定时器的利用率较低,如果继续一直使用将会占用资源,而且带来的有效价值也不大。此时为节省资源,可将剩余的任务转移到最接近的30秒哈希环定时器对应的哈希环存储器上,然后将新建的60秒哈希环定时器以及对应哈希环存储器从任务调度器中删除,退出使用。
进一步地,任务的执行频率分布情况可能还与时间段有关系,例如在A时间段内客户端发送来的需要调度的任务中,各任务的执行频率可能集中在30s~60s范围内;而B时间段内客户端发送来的需要调度的任务中,各任务的执行频率可能集中在60s~120s范围内,等等。也就是说,不同时间段内任务的执行频率集中范围可能不同,相应地,最适用的哈希环定时器也就不同。考虑到时间段对任务执行频率分布情况的影响,本发明实施例还提供了一种基于时间段切换的哈希环组动态适配调整方法,参考图7,所述方法主要包括以下步骤:
步骤401,划分时间段,根据任务调度的历史数据确定每个时间段内使用最多的一个或多个哈希环定时器。
时间段的划分可以根据实际需求来进行,例如可以一天为单位,每个小时或每两个小时作为一个时间段;也可以一周为单位,每天作为一个时间段,等等;在此不做具体限定。以一周为单位,每天划分为一个时间段为例,假如通过大数据统计后发现,周一这个时间段内,任务的执行频率大多集中在30s~300s之间,相应地,最适用的也是使用最多的为30秒哈希环定时器和60秒哈希环定时器。类似地,可以确定周二到周日每天使用最多的哈希环定时器。
步骤402,将每个时间段内使用最多的一个或多个哈希环定时器划分到一个哈希环组,并对划分出的哈希环组进行时间段标记。
仍以上述实施例说明,通过大数据统计发现,周一使用最多的为30秒哈希环定时器和60秒哈希环定时器,因此可将这两个哈希环定时器划分到一个哈希环组,并对该哈希环组进行时间段标记,即标记为“周一”,表征该组为周一时间段内使用最多的哈希环定时器。同理,可将周二到周日每天使用最多的哈希环定时器分别划分到一个哈希环组,并分别标记为“周二”到“周日”。通过进行时间段标记,可方便后续调用。
步骤403,在进行本次任务调度时,根据当前时间段启用带有对应时间段标记的哈希环组中的哈希环定时器,使对应的哈希环定时器和哈希环存储器投入使用。
仍以上述实施例说明,在进行本次任务调度时,如果当前时间段为周一,则从多个哈希环组中找出带有“周一”标记的哈希环组,并启动该哈希环组中的哈希环定时器,即30秒哈希环定时器和60秒哈希环定时器。由大数据统计可推测,在周一这个时间段内,使用这两个哈希环定时器比较合理。
步骤404,当切换到下一个时间段时,将前一个时间段对应的哈希环组中的哈希环定时器关闭,并启用带有下一个时间段标记的哈希环组中的哈希环定时器。
仍以上述实施例说明,当周一结束进入周二时,由于时间段发生了切换,对应最适用的哈希环定时器可能也发生了变化,此时可将带有“周一”标记的哈希环组中的哈希环定时器关闭,继续从多个哈希环组中找出带有“周二”标记的哈希环组,并启动该哈希环组中的哈希环定时器。以此类推,当由周二切换到周三、周三切换到周四等情况下,同步切换相应的哈希环组,保证每个时间段内都能启用带有相应标记的哈希环组,即该时间段内最适用的哈希环定时器。
通过上述时间段与哈希环组的结合,可完成不同时间段内哈希环组的动态适配调整,使得每个时间段内,都既能够保证大部分任务能满足执行精度需求,使用最匹配的哈希环定时器,又能够保证哈希环资源的有效利用,避免启用不必要的哈希环定时器。
实施例5
在上述实施例2和实施例3提供的任务调度方法中,任务调度器中仅设置一个哈希环定时器,相应设有一个哈希环存储器,该哈希环存储器中的槽位数量、槽位间隔以及执行指针转动一圈的时间都是固定的,每个槽位的任务列表中最多能容纳的任务数量是固定的,则整个哈希环存储器上最多能容纳的任务数量也是固定的。从理论上分析,哈希环存储器中的槽位数越多,能容纳的任务数量就越多。
当任务调度器中设置好哈希环定时器后,哈希环存储器的结构相应确定,哈希环定时器会源源不断地将待执行的任务放入哈希环存储器的槽位中。假设此时该哈希环存储器上存储的任务数量已经较多,或者说每个槽位上都已经存储了较多的任务,如果继续将客户端发来的需要调度的任务不断添加至该哈希环存储器中,就可能会影响任务的拉取与执行效率。在这种情况下,如果可以根据任务量的实际需求将原有哈希环存储器切换为拥有更多槽位的哈希环存储器,就可以解决上述问题。
基于上述考虑,本发明实施例进一步提供了一种可进行哈希环切换的任务调度方法。其中,为方便描述,将任务调度器中当前设置的哈希环存储器记为第一哈希环存储器,第一哈希环存储器中设有执行指针以及环形等间隔排列的M个槽位,执行指针转动一圈的时间为X,与所述哈希环定时器的定时时间一致。如图8所示,本发明实施例提供的任务调度方法主要包括以下步骤:
步骤501,哈希环定时器接收到任务后将任务放于第一哈希环存储器的对应槽位,并以第一频率转动第一哈希环存储器上的执行指针,进而依次取出执行指针所指槽位上已到执行时间的任务执行。
具体实现过程可参考实施例2中的步骤101-104,不同之处仅在于将任务调度器中当前设置的哈希环存储器记为第一哈希环存储器,固定频率记为第一频率,包括以下步骤:
1)任务接收器接收到客户端发送来的任务调度信息后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入本地的缓冲队列;2)定时拉取线程以第一频率从所述缓冲队列中拉取任务,由哈希环定时器基于所述执行频率将任务放于所述第一哈希环存储器对应槽位的任务列表中;其中,所述第一频率=X/M;3)哈希环定时器以所述第一频率转动所述第一哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的任务;4)哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行。其中,如果任务没有停止,则哈希环定时器将任务的执行逻辑分发给异步执行器之后,再次将任务放回所述第一哈希环存储器上该任务在取出之前所在槽位的任务列表中。
循环执行上述步骤3)和步骤4),即可实现任务的多次甚至无限次调度;具体实现过程可参考实施例2中的介绍,在此不做赘述。
步骤502,实时统计第一哈希环存储器上的任务数量,当任务数量超过预设存储量时,新建一个槽位数量为n*M的第二哈希环存储器;其中,n≥2,且第二哈希环存储器的执行指针转动一圈的时间仍为X。
这里的预设存储量可根据所述第一哈希环存储器的实际存储能力或负载能力来设置,如果所述第一哈希环存储器上的任务数量已超过预设存储量,推测第一哈希环存储器仅依靠现有的槽位已经难以满足当前大批量任务的存放需求,此时需要新建第二哈希环存储器进行哈希环切换。所述第二哈希环存储器的创建过程具体如下:
首先,新建一个空的第二哈希环存储器,并按照所述第一哈希环存储器上的槽位位置,在所述第二哈希环存储器上同步设置M个槽位。也就是先将第一哈希环存储器的槽位完全复刻到第二哈希环存储器上,这样做是为了保证第一哈希环存储器上现有的任务在切换到第二哈希环存储器上之后,仍占有相同的槽位位置,且对这M个槽位来说,每两个相邻槽位之间的时间间隔仍然是相同的(即X/M),所以切换哈希环存储器后仍可按照任务的执行频率按时取出执行,不会破坏原有的执行规则。
然后,根据任务数量需求,在所述第二哈希环存储器的每两个相邻槽位之间,按照等间隔排列的原则增设n-1个槽位,得到槽位数量为n*M的第二哈希环存储器。其中,需要存储的任务数量越多,n值选取也就越大,从而可将槽位数量扩展更多。由于需要确保先设置的M个槽位与第一哈希环存储器上的槽位设置一致,而新增设的槽位也只能增设在两个相邻槽位之间,因此第二哈希环存储器的槽位数量与第一哈希环存储器的槽位数量总是成比例关系,即倍数切换。
步骤503,将所述第一哈希环存储器上的各任务按照槽位位置对应关系复制到所述第二哈希环存储器上的对应槽位上。
按照槽位位置对应关系进行复制,也就是将所述第一哈希环存储器上的各任务对应复制到所述第二哈希环存储器中先设置的M个槽位上,使得每个任务复制前后在哈希环上占有相同的槽位位置。刚复制完成后,新增的槽位上是没有任务存放的,当后续再有新的任务需要存放时,才会放在新增的槽位上,来分担原有槽位的存储压力。
步骤504,复制完成后,将复制过程中由所述第一哈希环存储器中取出执行的任务从所述第二哈希环存储器的对应槽位上删除,使所述第二哈希环存储器投入使用,所述第一哈希环存储器退出使用。
在复制任务的过程中,所述第一哈希环存储器上的执行指针仍在转动,当转动到某个槽位时,仍会取出该槽位上到执行时间的任务来执行;这部分任务也会复制到第二哈希环存储器上,但由于已经在第一哈希环存储器上完成执行,因此可以将这部分任务在第二哈希环存储器中暂时删除。对于执行指针的位置,可通过以下方法确定:如果当前在第一哈希环存储器上执行指针指在第一位置,则计算将所述第一哈希环存储器上的各任务复制到所述第二哈希环存储器上所需要的时间,确定在这段时间内执行指针在第一哈希环存储器上转过的角度;当复制完任务后,将执行指针从第一位置处转动所述角度作为第二位置,也就是执行指针在第二哈希环存储器上所指的槽位位置。
另外,对于复制过程中由所述第一哈希环存储器中取出执行的这部分任务,如果任务没有停止,哈希环定时器将任务的执行逻辑分发给异步执行器之后,由于第一哈希环存储器已经退出使用,则需要将任务放回所述第二哈希环存储器上对应槽位的任务列表中,后续调度时直接从所述第二哈希环存储器上取出执行即可。
其中,当所述第二哈希环存储器投入使用之后,由于存储器的哈希环结构发生变化,定时拉取线程拉取任务的频率以及哈希环定时器转动执行指针的频率都相应发生变化,任务调度方法将按照以下步骤进行:
1)定时拉取线程以第二频率从所述缓冲队列中拉取任务,由哈希环定时器基于所述执行频率将任务放于所述第二哈希环存储器对应槽位的任务列表中;其中,所述第二频率=X/(n*M);2)哈希环定时器以所述第二频率转动第二哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的任务;3)哈希环定时器基于任务编号向任务接收器询问取出的任务是否已停止,如果由对应的任务结束时间判断任务没有停止,则将任务的执行逻辑分发给异步执行器进行异步执行。如果任务没有停止,则哈希环定时器将任务的执行逻辑分发给异步执行器之后,再次将任务放回所述第二哈希环存储器上该任务在取出之前所在槽位的任务列表中。其中,除任务拉取频率以及指针转动频率发生变化以外,其余方法仍与使用第一哈希环存储器时相同,具体可参考实施例2中的相关介绍,在此不做赘述。
进一步地,上述实施例中是通过先完全复制第一哈希环存储器上的任务,再选择性删除复制过程已在第一哈希环存储器上取出执行的任务。在可选的实施例中,还可预先进行选择,然后选择性地进行复制切换,具体的任务调度过程可参考图9,具体如下:
步骤501,哈希环定时器接收到任务后将任务放于第一哈希环存储器的对应槽位,并以第一频率转动第一哈希环存储器上的执行指针,进而依次取出执行指针所指槽位上已到执行时间的任务执行。具体实现过程与前面实施例中的步骤501相同,在此不做赘述。
步骤502,实时统计第一哈希环存储器上的任务数量,当任务数量超过预设存储量时,新建一个槽位数量为n*M的第二哈希环存储器;其中,n≥2,且第二哈希环存储器的执行指针转动一圈的时间仍为X。具体实现过程与前面实施例中的步骤502相同,在此不做赘述。
步骤503’,计算将所述第一哈希环存储器上的各任务复制到所述第二哈希环存储器上所需要的时间,并标记出在该时间内可从所述第一哈希环存储器中取出执行的任务。
这里计算时间时可以第一哈希环存储器上每两个相邻槽位之间的时间间隔为单位,即计算该复制过程需要几个时间间隔,然后统计在这几个时间间隔内有哪些任务会从相应槽位中取出执行,并将统计得到的这部分任务进行标记,以便后续筛选使用。
步骤504’,将未带标记的任务按照槽位位置对应关系复制到所述第二哈希环存储器上的对应槽位上,使所述第二哈希环存储器投入使用,所述第一哈希环存储器退出使用。
带标记的这部分任务由于在复制过程中就会从所述第一哈希环存储器中取出执行,因此复制时可忽略这部分任务,直接将剩余的未带标记的任务复制到所述第二哈希环存储器中即可;复制完成后确定执行指针在第二哈希环存储器上的位置,确定方法可参考前面实施例的介绍,在此不做赘述。相应地,对于没有复制过来的这部分任务,如果任务没有停止,哈希环定时器将任务的执行逻辑分发给异步执行器之后,由于第一哈希环存储器已经退出使用,则需要将任务放回所述第二哈希环存储器上对应槽位的任务列表中,后续调度时直接从所述第二哈希环存储器上取出执行即可。其中,所述第二哈希环存储器投入使用之后的任务调度方法可参考前面的实施例介绍,在此不做赘述。
通过上述哈希环切换方法,可减轻原有哈希环存储器的存储压力,确切地说是分担原有槽位上的存储压力,将各任务更均匀地分布在新建的哈希环存储器上的新增槽位上。具体通过下面的实施例进行说明:
如图10所示,在一个具体的实施例中,原有的第一哈希环存储器设有环形等间隔排列的4个槽位,分别记为槽位1、3、5、7,如左图所示;假设执行指针转动一圈的时间为120s,则每两个相邻槽位之间的时间间隔为30s,执行指针每过30s便移动到下一个槽位处,取下一个槽位上的任务执行。现由于任务量过大,第一哈希环存储器上的槽位数量已难以满足需求,需将槽位数量增加一倍,则先新建一个第二哈希环存储器,在第二哈希环存储器上设置槽位1、3、5、7,与第一哈希环存储器上的槽位位置一致;然后,在槽位1、3中间设置槽位2,在槽位3、5中间设置槽位4,在槽位5、7中间设置槽位6,在槽位7、1中间设置槽位8,得到如右图所示的第二哈希环存储器,共有环形等间隔排列的8个槽位。
在第二哈希环存储器中,执行指针转动一圈的时间仍为120s,槽位数量变为8,则每两个相邻槽位之间的时间间隔为15s,执行指针每过15s便移动到下一个槽位处,取下一个槽位上的任务执行。以哈希环存储器中的执行指针顺时针转动为例,假设在第一哈希环存储器中,执行指针当前正指向槽位5,如左图所示;复制任务需要一个时间间隔,即30s,则复制完成后,执行指针在第二哈希环存储器中应该指向槽位7,如右图所示。
在未进行哈希环切换时,假设哈希环定时器向第一哈希环存储器中放入任务时,计算后发现应将任务放于槽位1与槽位3之间的位置,且更偏向于槽位1,那么哈希环定时器只能将任务放入槽位1;当切换为第二哈希环存储器之后,由于槽位1与槽位3之间新增设了槽位2,如果该任务的最佳位置在槽位2左右,则可将该任务放于第二哈希环存储器的槽位2处,这样就可以分担原有槽位的存储压力。同理地,其他任务在存储时也可以优先放入新增的槽位位置,从而可使各任务比较均匀地分布在第二哈希环存储器的各槽位上。
通过上述哈希环切换方法,当实际任务量过多导致现有哈希环存储器难以满足使用需求时,可根据实际任务量的需求将槽位进行扩展,即基于原有哈希环存储器新建一个拥有更多槽位的哈希环存储器,并将待执行的任务按槽位对应关系切换到新建的哈希环存储器上,在不破坏原有执行规则的基础上进行了槽位扩展,后续进行任务存储时可分担原有槽位的存储压力,使各任务比较均匀地分布在新建哈希环存储器的各槽位上,能够有效保证任务的拉取与执行效率。
本领域普通技术人员可以理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于缓冲队列和哈希环的任务调度方法,其特征在于,任务调度器中设有哈希环定时器和哈希环存储器,哈希环存储器中设有执行指针以及环形等间隔排列的多个槽位,执行指针转动一圈的时间与所述哈希环定时器的定时时间一致;任务调度器中设有多个不同精度的哈希环定时器,每个哈希环定时器对应一种哈希环存储器;则任务调度方法包括:
任务接收器接收到任务调度信息后,将任务编号和任务结束时间写入本地缓存,将任务的执行频率和执行逻辑写入本地的缓冲队列;所述本地缓存是任务接收器在本机设置的一个KV数据结构;任务接收器为接收到的任务设置一个唯一的任务编号,并将本地缓存中KV数据结构的key设置为任务编号,value设置为对应的任务结束时间,从而实现将任务编号和任务结束时间写入本地缓存;其中,如果接收到的任务没有任务结束时间,则将value设置为空;
任务调度器启动定时拉取线程以固定频率从所述缓冲队列中拉取任务,并根据拉取的任务的执行频率判断拉取的任务应使用的哈希环定时器,判断完成后将拉取的任务放入对应的哈希环定时器;
哈希环定时器基于拉取的任务的执行频率计算拉取的任务应放于对应哈希环存储器的槽位位置,计算完成后将拉取的任务放于对应哈希环存储器上该槽位位置的任务列表中;
哈希环定时器以所述固定频率转动所述哈希环存储器上的执行指针,并取出执行指针所指槽位的任务列表中已到执行时间的拉取的任务;
哈希环定时器基于任务编号向任务接收器询问取出的拉取的任务是否已停止,如果由对应的任务结束时间判断拉取的任务没有停止,则将拉取的任务的执行逻辑分发给异步执行器进行异步执行;
其中,在任务接收器接收到任务调度信息后,所述方法还包括:
任务接收器实时接收该任务对应的任务结束时间,并对所述本地缓存中的任务结束时间进行更新,以便在该任务下一次被调度时,根据所述本地缓存中更新后的任务结束时间判断任务是否被停止,进而确定是否执行该任务。
2.根据权利要求1所述的基于缓冲队列和哈希环的任务调度方法,其特征在于,如果拉取的任务没有停止,则哈希环定时器将拉取的任务的执行逻辑分发给异步执行器之后,再次将拉取的任务放回所述哈希环存储器上所述拉取的任务在取出之前所在槽位的任务列表中。
3.根据权利要求1所述的基于缓冲队列和哈希环的任务调度方法,其特征在于,所述哈希环定时器基于任务编号向任务接收器询问取出的拉取的任务是否已停止,如果由对应的任务结束时间判断拉取的任务没有停止,则将拉取的任务的执行逻辑分发给异步执行器进行异步执行,具体为:
哈希环定时器根据拉取的任务对应的任务编号,去所述任务接收器的本地缓存中查询对应的任务结束时间;如果任务结束时间为空或者任务结束时间大于当前时间,表示拉取的任务没有停止,则哈希环定时器将拉取的任务的执行逻辑分发给异步执行器,由异步执行器按照所述执行逻辑执行所述拉取的任务。
4.根据权利要求1所述的基于缓冲队列和哈希环的任务调度方法,其特征在于,任务调度器中设置有四个不同精度的哈希环定时器,分别为30秒哈希环定时器、60秒哈希环定时器、300秒哈希环定时器和1800秒哈希环定时器,对应四种不同的哈希环存储器;则所述根据拉取的任务的执行频率判断拉取的任务应使用的哈希环定时器具体为:
当拉取的任务的执行频率大于等于30秒小于60秒时,使用30秒哈希环定时器;当拉取的任务的执行频率大于等于60秒小于300秒时,使用60秒哈希环定时器;当拉取的任务的执行频率大于等于300秒小于1800秒时,使用300秒哈希环定时器;当拉取的任务的执行频率大于等于1800秒时,使用1800秒哈希环定时器。
5.根据权利要求1-4任一所述的基于缓冲队列和哈希环的任务调度方法,其特征在于,在任务接收器接收到任务调度信息后,所述方法还包括:
任务接收器将任务的执行频率和执行逻辑写入计算机的外部缓存中,以便在计算机重启后,任务接收器从所述外部缓存中读取任务的执行频率和执行逻辑,并写入本地的缓冲队列中。
6.一种基于缓冲队列和哈希环的任务调度装置,其特征在于,包括任务接收器和任务调度器,所述任务接收器用于接收并存储客户端发送来的任务,所述任务调度器用于根据所述任务接收器中存储的任务进行任务调度;
所述任务接收器中设有本地缓存和缓冲队列,所述本地缓存用于存放任务编号和任务结束时间,所述缓冲队列用于存放任务的执行频率和执行逻辑;所述本地缓存是任务接收器在本机设置的一个KV数据结构;任务接收器为接收到的任务设置一个唯一的任务编号,并将本地缓存中KV数据结构的key设置为任务编号,value设置为对应的任务结束时间,从而实现将任务编号和任务结束时间写入本地缓存;其中,如果接收到的任务没有任务结束时间,则将value设置为空;
所述任务调度器中设有定时拉取线程、多个不同精度的哈希环定时器、哈希环存储器和异步执行器,哈希环存储器中设有执行指针以及环形等间隔排列的多个槽位,执行指针转动一圈的时间与所述哈希环定时器的定时时间一致;每个哈希环定时器对应一种哈希环存储器;所述定时拉取线程用于以固定频率从所述缓冲队列中拉取任务,并根据拉取的任务的执行频率判断拉取的任务应使用的哈希环定时器,判断完成后将拉取的任务放入对应的哈希环定时器;哈希环定时器基于拉取的任务的执行频率计算拉取的任务应放于对应哈希环存储器的槽位位置,计算完成后将拉取的任务放于对应哈希环存储器上该槽位位置的任务列表中,并以所述固定频率转动所述哈希环存储器上的执行指针,进而取出执行指针所指槽位的任务列表中已到执行时间的拉取的任务,向所述本地缓存询问取出的拉取的任务是否已停止,如果没有停止则将拉取的任务的执行逻辑分发给异步执行器进行异步执行;
其中,在任务接收器接收到任务调度信息后,任务接收器实时接收该任务对应的任务结束时间,并对所述本地缓存中的任务结束时间进行更新,以便在该任务下一次被调度时,根据所述本地缓存中更新后的任务结束时间判断任务是否被停止,进而确定是否执行该任务。
7.根据权利要求6所述的基于缓冲队列和哈希环的任务调度装置,其特征在于,所述哈希环存储器是一个环形队列搭配任务列表的数据结构;
所述环形队列包括呈环形等间隔排列的多个槽位,每过一个时间间隔,哈希环存储器的执行指针从当前槽位移向下一个槽位,且所述执行指针转动一圈的时间与所述哈希环定时器的定时时间一致;其中,每个槽位处对应设置一个任务列表,用于存放该槽位上待执行的任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011031102.1A CN112231079B (zh) | 2020-09-27 | 2020-09-27 | 一种基于缓冲队列和哈希环的任务调度方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011031102.1A CN112231079B (zh) | 2020-09-27 | 2020-09-27 | 一种基于缓冲队列和哈希环的任务调度方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112231079A CN112231079A (zh) | 2021-01-15 |
CN112231079B true CN112231079B (zh) | 2024-01-26 |
Family
ID=74107985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011031102.1A Active CN112231079B (zh) | 2020-09-27 | 2020-09-27 | 一种基于缓冲队列和哈希环的任务调度方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112231079B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113950014A (zh) * | 2021-09-30 | 2022-01-18 | 杭州贝嘟科技有限公司 | 短信延时发送方法、设备、电子装置和存储介质 |
CN117407146B (zh) * | 2023-12-14 | 2024-03-08 | 江苏金恒信息科技股份有限公司 | 基于哈希算法满足时序性的调度方法、系统、介质及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060001509A (ko) * | 2004-06-30 | 2006-01-06 | 재단법인서울대학교산학협력재단 | 버퍼를 이용한 실시간 다중 태스크 스케줄링에서의 동적전압 조정 시스템 및 방법 |
CN108710535A (zh) * | 2018-05-22 | 2018-10-26 | 中国科学技术大学 | 一种基于智能处理器的任务调度系统 |
CN109753593A (zh) * | 2018-12-29 | 2019-05-14 | 广州极飞科技有限公司 | 喷洒作业任务调度方法及无人机 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8381004B2 (en) * | 2010-05-26 | 2013-02-19 | International Business Machines Corporation | Optimizing energy consumption and application performance in a multi-core multi-threaded processor system |
-
2020
- 2020-09-27 CN CN202011031102.1A patent/CN112231079B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060001509A (ko) * | 2004-06-30 | 2006-01-06 | 재단법인서울대학교산학협력재단 | 버퍼를 이용한 실시간 다중 태스크 스케줄링에서의 동적전압 조정 시스템 및 방법 |
CN108710535A (zh) * | 2018-05-22 | 2018-10-26 | 中国科学技术大学 | 一种基于智能处理器的任务调度系统 |
CN109753593A (zh) * | 2018-12-29 | 2019-05-14 | 广州极飞科技有限公司 | 喷洒作业任务调度方法及无人机 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112231079A (zh) | 2021-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112231079B (zh) | 一种基于缓冲队列和哈希环的任务调度方法和装置 | |
CN112231080B (zh) | 一种基于多个不同精度哈希环的任务调度方法和装置 | |
CA2785398C (en) | Managing queries | |
US5944778A (en) | Periodic process scheduling method | |
US20070223506A1 (en) | Data broadcast schedule system, and apparatus, method recording medium or program thereabout | |
US20020049730A1 (en) | Data acquisition apparatus and method | |
US20110067034A1 (en) | Information processing apparatus, information processing method, and information processing program | |
CN107168777B (zh) | 分布式系统中资源的调度方法以及装置 | |
US20080104593A1 (en) | Thread hand off | |
CN113157467B (zh) | 一种多进程数据输出方法 | |
JPWO2009150815A1 (ja) | マルチプロセッサシステム | |
CN110895486B (zh) | 分布式任务调度系统 | |
CN115658272B (zh) | Etl任务调度方法、存储介质、电子设备 | |
CN111427670A (zh) | 任务调度方法和系统 | |
CN108509280A (zh) | 一种基于推送模型的分布式计算集群本地性调度方法 | |
CN113553175B (zh) | 面向交通数据流的最优排序算法选择方法 | |
WO2021212967A1 (en) | Task scheduling for distributed data processing | |
CN108021439B (zh) | 一种任务轮询方法、任务排布方法和相关装置 | |
US20020010732A1 (en) | Parallel processes run scheduling method and device and computer readable medium having a parallel processes run scheduling program recorded thereon | |
US10261718B1 (en) | Adaptively controlling data copy operations that copy data in an electronic environment | |
CN111158930A (zh) | 一种基于Redis的高并发延时任务系统和处理方法 | |
JP2002073354A (ja) | タスク制御装置とタスク制御方法 | |
KR101771178B1 (ko) | 인메모리 캐시를 관리하는 방법 | |
CN115756770A (zh) | 请求操作调度执行方法和远程过程调用系统 | |
EP1011045B1 (en) | Object-oriented job scheduler |
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 |