任务调度方法、电子设备和存储介质转让专利

申请号 : CN202210937431.5

文献号 : CN115016919B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 沈子喻武佳斌

申请人 : 阿里云计算有限公司

摘要 :

本申请实施例提供了一种任务调度方法、电子设备和存储介质,应用于包括多层任务队列的任务调度系统,以使任务队列中任务能够正常执行。所述方法包括:各层任务队列根据出队任务的执行时间,确定第一累计执行时间;确定各层任务队列的预期执行时间;依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列;从所述目标层任务队列中获取任务给线程处理。可以基于实际执行时间和预期执行时间来筛选任务队列,使得各类任务均能够得到执行,不会出现任务饿死的情况。

权利要求 :

1.一种任务调度方法,应用于包括多层任务队列的任务调度系统,所述方法包括:若线程执行所述任务的执行时间达到指定时长之前,所述任务执行完毕,将所述执行时间添加到目标任务队列的第一累计执行时间中;

若线程执行所述任务的执行时间达到指定时长,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中;

基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间;

依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间;

依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间;

依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比;

依据所述调度时间比筛选执行调度的目标层任务队列;

从所述目标层任务队列中获取任务给线程处理。

2.根据权利要求1所述的方法,其中,所述多层任务队列中每层对应一个任务队列,每层的任务队列为根据任务的执行时间长短排序的队列,其中,执行时间短的任务优先出队。

3.根据权利要求1所述的方法,其中,所述线程执行所述任务的执行时间达到指定时长之后,还包括:判断所述任务是否执行完毕;

若所述任务未执行完毕,则将所述指定时长添加到所述任务的第二累计执行时间。

4.根据权利要求3所述的方法,其中,每层的任务队列对应有执行时间范围,所述方法还包括:依据所述第二累计执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;

将所述任务加入到对应层数的任务队列中。

5.根据权利要求1所述的方法,其中,还包括:根据任务的优先级信息确定所述任务初始的任务队列的层数,将所述任务添加到对应层的任务队列中。

6.根据权利要求5所述的方法,其中,还包括:根据任务的优先级信息确定所述任务的时钟系数,依据所述时钟系数和第二累计执行时间确定虚拟执行时间。

7.根据权利要求6所述的方法,其中,所述从所述目标层任务队列中获取任务给线程处理,包括:按照任务的虚拟执行时间,从所述目标层任务队列中获取任务给线程处理。

8.根据权利要求6所述的方法,其特征在于,还包括:依据所述虚拟执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;

将所述任务加入到对应层数的任务队列中。

9.一种电子设备,包括:处理器;

和存储器,其上存储有可执行代码,当所述可执行代码被处理器执行时,执行如权利要求1‑8中任一项所述的方法。

10.一种机器可读介质,其上存储有可执行代码,当所述可执行代码被处理器执行时,执行如权利要求1‑8中任一项所述的方法。

说明书 :

任务调度方法、电子设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种任务调度方法及装置、一种电子设备和一种存储介质。

背景技术

[0002] 查询引擎在进行任务调度时,通常是基于用户优先级和FIFO(First Input First Output,先进先出)的队列执行。其中,优先级高的任务优先出队,优先级相同的任务根据FIFO的规则出队。
[0003] 举例来说,节点接收到任务后,会给任务分配一个任务id,任务id是递增的,从队列中出队任务时,优先级高的任务先出队,优先级相同时,根据任务id来排序,任务id小的优先出队,也就是FIFO的队列。
[0004] 但是,上述这种方式中,任务根据优先级高低确定出队顺序,如果某一任务的优先级较低,且队列中一直存在高于其优先级的任务,就会导致低优先级的任务无法得到执行,极端情况下可能导致低优先级的任务饿死。

发明内容

[0005] 本申请实施例提供了一种任务调度方法,以使任务队列中任务能够正常执行。
[0006] 相应的,本申请实施例还提供了一种电子设备和一种存储介质,用以保证上述系统的实现及应用。
[0007] 为了解决上述问题,本申请实施例公开了一种任务调度方法,应用于包括多层任务队列的任务调度系统,所述方法包括:
[0008] 各层任务队列根据出队任务的执行时间,确定第一累计执行时间;
[0009] 确定各层任务队列的预期执行时间;
[0010] 依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列;
[0011] 从所述目标层任务队列中获取任务给线程处理。
[0012] 可选的,所述多层任务队列中每层对应一个任务队列,每层的任务队列为根据任务的执行时间长短排序的队列,其中,执行时间短的任务优先出队。
[0013] 可选的,所述各层任务队列根据出队任务的执行时间,确定第一累计执行时间,包括:
[0014] 若线程执行所述任务的执行时间达到指定时长之前,所述任务执行完毕,将所述执行时间添加到所述目标任务队列的第一累计执行时间中;
[0015] 若线程执行所述任务的执行时间达到指定时长,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中。
[0016] 可选的,所述线程执行所述任务的执行时间达到指定时长之后,还包括:
[0017] 判断所述任务是否执行完毕;
[0018] 若所述任务未执行完毕,则将所述指定时长添加到所述任务的第二累计执行时间。
[0019] 可选的,每层的任务队列对应有执行时间范围,所述方法还包括:
[0020] 依据所述第二累计执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;
[0021] 将所述任务加入到对应层数的任务队列中。
[0022] 可选的,所述确定各层任务队列的预期执行时间,包括:
[0023] 基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间;
[0024] 依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0025] 可选的,所述依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间,包括:
[0026] 依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间;
[0027] 依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0028] 可选的,所述依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列,包括:
[0029] 依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比;
[0030] 依据所述调度时间比筛选执行调度的目标层任务队列。
[0031] 可选的,还包括:
[0032] 根据任务的优先级信息确定所述任务初始的任务队列的层数,将所述任务添加到对应层的任务队列中。
[0033] 可选的,还包括:
[0034] 根据任务的优先级信息确定所述任务的时钟系数,依据所述时钟系数和第二累计执行时间确定虚拟执行时间。
[0035] 可选的,所述从所述目标层任务队列中获取任务给线程处理,包括:
[0036] 按照任务的虚拟执行时间,从所述目标层任务队列中获取任务给线程处理。
[0037] 可选的,还包括:
[0038] 依据所述虚拟执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;
[0039] 将所述任务加入到对应层数的任务队列中。
[0040] 本申请实施例还公开了一种任务调度系统,所述任务调度系统包括线程池、任务池和任务调度装置,所述线程池包括多个线程,所述任务池包括多层任务队列,每层任务队列中可放入一个或多个任务,所述任务调度装置包括:
[0041] 队列时间累计模块,用于各层任务队列根据出队任务的执行时间,确定第一累计执行时间;
[0042] 预期时间确定模块,用于确定各层任务队列的预期执行时间;
[0043] 目标层筛选模块,用于依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列;
[0044] 出队模块,用于从所述目标层任务队列中获取任务给线程处理。
[0045] 本申请实施例还公开了一种电子设备,包括:处理器;和存储器,其上存储有可执行代码,当所述可执行代码被处理器执行时,执行如本申请实施例所述的方法。
[0046] 本申请实施例还公开了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被处理器执行时,执行如本申请实施例所述的方法。
[0047] 与现有技术相比,本申请实施例包括以下优点:
[0048] 本申请实施例中,任务调度系统可设置多层任务队列,各层任务队列根据出队任务的执行时间,确定第一累计执行时间,然后确定各层任务队列的预期执行时间,依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列,从而可以基于实际执行时间和预期执行时间来筛选任务队列,从所述目标层任务队列中获取任务给线程处理,使得各类任务均能够得到执行,不会出现任务饿死的情况。

附图说明

[0049] 图1是本申请实施例的一种任务调度系统示例的示意图;
[0050] 图2是本申请的一种任务调度方法实施例的步骤流程图;
[0051] 图3是本申请的另一种任务调度方法实施例的步骤流程图;
[0052] 图4是本申请的另一种任务调度方法实施例的步骤流程图;
[0053] 图5是本申请一个实施例提供的示例性装置的结构示意图。

具体实施方式

[0054] 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
[0055] 本申请实施例可以应用于基于任务的处理场景中,如查询引擎、数据库查询等,基于任务调度系统调度各项任务,实现基于任务的查询等处理。
[0056] 参照图1,示出了一种任务调度系统,该任务调度系统包括线程池和任务池,其中,任务池包括多层任务队列(或称多级任务队列),如包括0层任务队列、1层任务队列、2层任务队列、3层任务队列和4层任务队列。线程池中包括多个线程,线程可执行任务队列中的任务的操作。其中,各层任务队列中包括等待执行的任务,线程池的线程会从任务等待队列中拿取待执行的任务,任务等待队列中出队的顺序就是任务调度的顺序。
[0057] 本申请实施例中,为了使得各任务都能得到执行,任务从任务队列中取出,由线程执行时,可设置线程的执行时间阈值即指定时长,每个任务在线程中执行时间达到指定时长,则停止执行任务,任务重新进入任务队列中执行。
[0058] 本申请实施例中,任务池中设置多层任务队列,其是一种基于任务执行时间来进行调度的任务队列。如图1所示的多层任务队列包括5层,分别为level0~level4,每层对应一个任务队列,每层的任务队列中的任务根据任务的执行时间长短排序,执行时间短的任务优先出队、执行。
[0059] 其中,所述多层任务队列按照执行时间范围划分层数,每层任务队列对应有执行时间范围,该执行时间范围为任务队列中任务的累计执行时间的范围,可以根据任务的累计执行时间确定所进入的任务队列的层数,并进入相应层的任务队列中。在一个示例中,0层任务队列的执行时间范围为0‑1秒(s)、1层任务队列的执行时间范围为1‑10s、2层任务队列的执行时间范围为10‑60s、3层任务队列的执行时间范围为60‑300s和4层任务队列的执行时间范围为300s以上。从而在任务首次进入队列时,默认层数为0层,每次执行完后,更新其对应的累计执行时间,重新计算所处的层数,下次重新入对到新的层数。
[0060] 任务池中任务出队时,首先确定任务队列的层数,然后从对应层数的任务队列中出队一个任务。其中,出队层数的选择是基于实际调度时间和预期调度时间来选择的。其中,任务队列的实际调度时间为其出队任务的执行时间之和,可称为第一累计执行时间。每个任务出队后可能无法执行完毕,会重新进入任务队列中等待下次执行,因此每个任务也可累计执行时间,可称为第二累计执行时间。任务队列的预期调度时间为任务队列期望调度的时间,本申请实施例中,任务队列的预期调度时间是从0~4逐层变小的,以使小任务所在的层数得到更多的执行时间,并且不会饿死大任务。其中,小任务指的是执行时间短的任务,如执行时间小于任务区分阈值的任务,大任务指的是执行时间长的任务,如执行时间大于任务区分阈值的任务。
[0061] 参照图2,示出了本申请的一种任务调度方法实施例的步骤流程图。
[0062] 步骤202,各层任务队列根据出队任务的执行时间,确定第一累计执行时间。
[0063] 每层任务队列会累计该层中任务的执行时间,作为第一累计执行时间。其中,当任务从任务队列中取出,由线程执行时,可基于任务由线程执行的执行时间,在任务停止执行时,该执行时间累加到取出任务的该层任务队列中,得到第一累计执行时间。
[0064] 初始时,各层任务队列的第一累计执行时间为0,默认从0层任务队列中获取任务并执行,可将任务的执行时间添加到0层任务队列的第一累计执行时间L0中。之后,随着每层任务队列中任务的执行,任务队列的第一累计执行时间逐渐增加。
[0065] 每次确定出队任务的任务队列可以称为目标任务队列。在一个可选实施例中,所述各层任务队列根据出队任务的执行时间,确定第一累计执行时间,包括:若线程执行所述任务的执行时间达到指定时长之前,所述任务执行完毕,将所述执行时间添加到所述目标任务队列的第一累计执行时间中;若线程执行所述任务的执行时间达到指定时长,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中。任务从任务队列中出队,由线程执行该任务,若在任务的执行时间达到指定时长之前,所述任务执行完毕,则将该任务的执行时间添加到所述目标任务队列的第一累计执行时间中。若任务的执行时间达到指定时长,且该任务未执行完毕,则该任务的执行时间为指定时长,可以将执行时间即指定时长添加到目标任务队列的第一累计执行时间中。
[0066] 步骤204,确定各层任务队列的预期执行时间。
[0067] 任务队列的预期执行时间为该任务队列所期望的任务的累计执行时间。各层任务队列的预期执行时间随着层数的增加而减少。因此,各层任务队列的预期执行时间与其到底层任务队列的预期执行时间相关。
[0068] 在一个可选实施例中,所述确定各层任务队列的预期执行时间,包括:基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间;依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0069] 可以先确定每层任务队列到底层任务队列的预期执行时间,因此可任务队列所在的层数和所述任务队列的第一累计执行时间。例如,底层任务队列为0层任务队列,则根据每层都累计执行时间,计算其对应的0层预期时间,则第n层对应的0层预期执行时间:
[0070]
[0071] 其中,n为任务队列的层数。
[0072] 假设,0层任务队列的第一累计执行时间为150s,1层任务队列的第一累计执行时间为80s,2层任务队列的第一累计执行时间为25s,3层任务队列的第一累计执行时间为10s,4层任务队列的第一累计执行时间为8s。则每层任务队列到0层任务队列的预期执行时间为:
[0073] 0层:
[0074] 1层:
[0075] 2层:
[0076] 3层:
[0077] 4层:
[0078] 然后依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。其中,所述依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间,包括:依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间;依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间,以底层任务队列的预期执行时间为基准,确定各层任务队列的预期执行时间。
[0079] 接上例,从上述各层对应到0层的预期执行时间,取其中的最大值作为0层的预期执行时间,即: 。
[0080] 按照上述每层任务队列到0层任务队列的预期执行时间的公式,可以反推确定出基于0层任务队列的预期执行时间,确定每层任务队列的预期执行时间,即:
[0081]
[0082] 则当前层任务队列的预期执行时间为上一层任务队列的预期执行时间的一半,即:
[0083]
[0084] 接上例,0层任务队列的预期执行时间为160s,1层任务队列的预期执行时间为80s,2层任务队列的预期执行时间为40s,3层任务队列的预期执行时间为20s,4层任务队列的预期执行时间为10s。
[0085] 从而能够确定每层任务队列的预期执行时间。
[0086] 步骤206,依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列。
[0087] 基于每层任务队列的第一累计执行时间和预期执行时间,可以确定每层任务队列的任务调度情况,进而确定执行调度的目标层任务队列。其中,所述依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列,包括:依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比;依据所述调度时间比筛选执行调度的目标层任务队列。
[0088] 针对每层任务队列,计算其第一累计执行时间和预期执行时间的比值,作为该层任务队列的调度时间比,即:
[0089]
[0090] 接上例,0层任务队列的调度时间比 为0.94,1层任务队列的调度时间比为1,2层任务队列的调度时间比 为0.63,3层任务队列的调度时间比为0.5,4层任务队列的调度时间比 为0.8。
[0091] 通过各层任务队列的调度时间比,调度时间比的值越小,对应层任务队列中任务实际执行的时间越少,需要优先调度,因此筛选调度时间比最小的任务队列,作为目标层任务队列。
[0092] 步骤208,从所述目标层任务队列中获取任务给线程处理。
[0093] 确定目标层任务队列后,从目标层任务队列确定一个任务出队,给线程池中的线程处理。线程执行任务所需的处理,每个线程执行任务的时间对应有指定时长,该指定时长为线程一次执行任务的最长时间。因此若任务的执行时间在指定时长之前执行完毕,则该任务可执行后续处理,如反馈结果等。若任务的执行时间达到指定时长,且任务未执行完毕,则任务需要重新进入到任务队列中排队,等待执行。
[0094] 一个可选实施例中,所述线程执行所述任务的执行时间达到指定时长之后,还包括:判断所述任务是否执行完毕;若所述任务未执行完毕,则将所述指定时长添加到所述任务的第二累计执行时间。依据所述第二累计执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;将所述任务加入到对应层数的任务队列中。
[0095] 若任务的执行时间达到指定时长,且任务未执行完毕,则任务需要重新进入到任务队列中排队,等待执行,任务所进入的任务队列可依据该任务的累计执行时间确定。任务在本次执行的执行时间为指定时长,因此可将指定时长添加到所述任务的第二累计执行时间,例如本次为任务首次执行,则其第二累计执行时间为指定时长,若本次不是任务首次执行,则在第二累计执行时间中添加指定时长,更新该任务的第二累计执行时间。然后确定该任务的第二累计执行时间,在哪一层任务队列的执行时间范围内,即确定第二累计执行时间所在的执行时间范围对应的层数,将该任务放入到该层数对应的任务队列中。
[0096] 本申请实施例中,还可对任务的执行时间进行补偿,当任务从运行(runnable)状态进入阻塞或等待(blocked)状态后,有一段时间内该任务的执行时间会停止增长。待下次从blocked状态进入runnable状态的时候,将其设置为当前层中任务的第二累计执行时间的最小值,保证其进入队列后仍然是处于公平且优先调度的状态。
[0097] 在多层任务队列的基础上,还可结合优先级信息执行任务的调度和处理。任务的优先级信息可基于任务对应的来源等设置,如任务对应的用户、生成任务的服务器等设置,本申请实施例对此不做限制。
[0098] 其中,多层任务队列可根据任务的累计执行时间,将任务分配到不同层的任务队列中,能够基于执行时间段的任务更多的CPU时间,即线程调用CPU等硬件资源执行任务的时间。本申请实施例还可设置虚拟时钟,根据优先级调整虚拟时钟,来实现给予高优先级任务更多CPU时间。
[0099] 本申请实施例中,优先级信息包括队列优先级信息和时钟优先级信息,队列优先级信息和时钟优先级信息可通过一个优先级信息体现,也可设置两个优先级信息,本申请实施例对此不做限制。以一个优先级信息体现队列优先级和时钟优先级为例,可将优先级信息设置为;两位数的数值,其中,十位数代表队列优先级,个位数代表时钟优先级。
[0100] 一个示例中,设置50个优先级0 49,优先级的十位决定虚拟时钟起始值,即任务从~哪层任务队列开始排队,其关系如表1所示:
[0101]
[0102] 优先级的个位决定虚拟时钟快慢,即时钟系数ratio2,其关系如表2所示:
[0103]
[0104] 从而默认情况下,任务首次入队进入底层任务队列,如0层任务队列,任务也可依据优先级信息确定首次进入的任务队列,基于任务优先级信息确定所述任务初始的任务队列的层数,将所述任务添加到对应层的任务队列中。如某一任务的优先级信息中十位为3,则确定层数为1,进入1层任务队列。
[0105] 本申请实施例中,还可基于时钟优先级信息调整任务处理的CPU时间。其中,根据任务的优先级信息确定所述任务的时钟系数,依据所述时钟系数和第二累计执行时间确定虚拟执行时间。根据任务的时钟优先级确定时钟系数,然后可采用时钟系数和第二累计执行时间确定虚拟执行时间,在一个示例中,虚拟执行时间和任务的第二累计执行时间的关系如下:
[0106]
[0107] 本申请实施例中,每个任务可基于第二累计执行时间和时钟系数确定虚拟执行时间,从而基于任务的虚拟执行时间选择进入的任务队列的层数,以及基于任务的虚拟执行时间筛选目标任务队列中的出队任务。一个示例中,可基于虚拟执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数,将所述任务加入到对应层数的任务队列中。另一个示例中,在任务队列作为目标任务队列选择任务出队时,可基于虚拟执行时间确定出队任务,将任务实际的第二累计执行时间替换成虚拟时间,来实现给予高优先级任务更多CPU时间。其中,CPU时间为CPU处理任务的时间。
[0108] 在上述实施例的基础上,本申请实施例中,优先级信息也可从上述优先级中筛选出n个等级来设置任务的优先级信息。在一个示例中,筛选出5个值作为任务的预定义的优先级,分别为highest=49,high=45,normal=35,low=15,lowest=0。在另外一些示例中,也可筛选出3个、8个、10个或20个等来设置任务的优先级。基于上述表1、2可见,优先级的数值越大,起始的虚拟时间越小,虚拟时间前进越慢,任务就可以获得更多的CPU时间。
[0109] 上述仅是一种5层任务队列以及对应优先级信息的设置示例,实际处理中,任务队列的层数、优先级信息等可依据需求设置,本申请实施例对此不做限制。
[0110] 综上,任务调度系统可设置多层任务队列,各层任务队列根据出队任务的执行时间,确定第一累计执行时间,然后确定各层任务队列的预期执行时间,依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列,从而可以基于实际执行时间和预期执行时间来筛选任务队列,从所述目标层任务队列中获取任务给线程处理,使得各类任务均能够得到执行,不会出现任务饿死的情况。
[0111] 本申请实施例中,高层级的任务队列中任务的预期执行时间段,通过任务队列的第一累计执行时间和预期执行时间计算调度时间比,从而筛选调度时间比小的任务队列为目标任务队列,使得小任务所在的层数的任务队列得到更多的执行时间,并且不会饿死大任务。
[0112] 在上述实施例的基础上,本申请实施例还提供了一种任务调度方法,能够在包括多层任务队列的任务调度系统中,合理调度任务,如图3所示。
[0113] 步骤302,确定各层任务队列的第一累计执行时间。
[0114] 步骤304,基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间。
[0115] 步骤306,依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间。
[0116] 步骤308,依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0117] 步骤310,依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比。
[0118] 步骤312,依据所述调度时间比筛选执行调度的目标层任务队列。
[0119] 步骤314,从所述目标层任务队列中获取任务给线程处理。
[0120] 步骤316,判断线程执行的任务是否完成。
[0121] 若是,执行步骤318,若否,执行步骤320。
[0122] 步骤318,将所述执行时间添加到所述目标任务队列的第一累计执行时间中。
[0123] 步骤320,判断线程执行所述任务的执行时间是否达到指定时长。
[0124] 若是,执行步骤322,若否,返回步骤316,继续判断。
[0125] 步骤322,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中。
[0126] 步骤324,将所述指定时长添加到所述任务的第二累计执行时间。
[0127] 步骤326,依据所述第二累计执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数。
[0128] 步骤328,将所述任务加入到对应层数的任务队列中。
[0129] 综上,多层优先队列通过任务的执行时间,将其分步在不同的层中,将大任务与小任务区分开,并且调度上倾斜到小任务上,大任务对小任务的影响会显著变小,小任务优先的调度策略有利于提升系统的任务吞吐量,并且小查询的执行时间波动更小,稳定性更好。
[0130] 在上述实施例的基础上,本申请实施例还提供了一种任务调度方法,能够结合多层任务队列和优先级共同进行任务调度,如图4所示。
[0131] 步骤402,确定各层任务队列的第一累计执行时间。
[0132] 步骤404,基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间。
[0133] 步骤406,依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间。
[0134] 步骤408,依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0135] 步骤410,依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比。
[0136] 步骤412,依据所述调度时间比筛选执行调度的目标层任务队列。
[0137] 步骤414,按照任务的虚拟执行时间,从所述目标层任务队列中获取任务给线程处理。
[0138] 步骤416,判断线程执行的任务是否完成。
[0139] 若是,执行步骤418,若否,执行步骤420。
[0140] 步骤418,将所述执行时间添加到所述目标任务队列的第一累计执行时间中。
[0141] 步骤420,判断线程执行所述任务的执行时间是否达到指定时长。
[0142] 若是,执行步骤422,若否,返回步骤416,继续判断。
[0143] 步骤422,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中。
[0144] 步骤424,将所述指定时长添加到所述任务的第二累计执行时间。
[0145] 步骤426,根据任务的优先级信息确定所述任务的时钟系数,依据所述时钟系数和第二累计执行时间确定虚拟执行时间。
[0146] 步骤428,依据所述虚拟执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数。
[0147] 步骤430,将所述任务加入到对应层数的任务队列中。
[0148] 步骤432,根据任务的优先级信息确定所述任务初始的任务队列的层数,将所述任务添加到对应层的任务队列中。
[0149] 多层任务队列与优先级信息共同作用,使得相同的优先级对于大任务和小任务起到调节作用,在计算资源向高优先级任务倾斜的同时,进一步避免低优先级任务饿死的情况发生。
[0150] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
[0151] 在上述实施例的基础上,本实施例还提供了一种任务调度系统,应用于电子设备中,如服务端的电子设备等。所述任务调度系统包括线程池、任务池和任务调度装置,所述线程池包括多个线程,所述任务池包括多层任务队列,每层任务队列中可放入一个或多个任务,所述任务调度装置包括:
[0152] 队列时间累计模块,用于各层任务队列根据出队任务的执行时间,确定第一累计执行时间;
[0153] 预期时间确定模块,用于确定各层任务队列的预期执行时间;
[0154] 目标层筛选模块,用于依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列;
[0155] 出队模块,用于从所述目标层任务队列中获取任务给线程处理。
[0156] 综上,任务调度系统可设置多层任务队列,各层任务队列根据出队任务的执行时间,确定第一累计执行时间,然后确定各层任务队列的预期执行时间,依据所述第一累计执行时间和预期执行时间,确定执行调度的目标层任务队列,从而可以基于实际执行时间和预期执行时间来筛选任务队列,从所述目标层任务队列中获取任务给线程处理,使得各类任务均能够得到执行,不会出现任务饿死的情况。
[0157] 其中,所述队列时间累计模块,用于若线程执行所述任务的执行时间达到指定时长之前,所述任务执行完毕,将所述执行时间添加到所述目标任务队列的第一累计执行时间中;若线程执行所述任务的执行时间达到指定时长,停止执行所述任务,并将指定时长添加到所述目标任务队列的第一累计执行时间中。
[0158] 还包括:任务时间累计模块,用于在线程执行所述任务的执行时间达到指定时长之后,判断所述任务是否执行完毕;若所述任务未执行完毕,则将所述指定时长添加到所述任务的第二累计执行时间。
[0159] 入队模块,用于依据所述第二累计执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;将所述任务加入到对应层数的任务队列中。
[0160] 所述预期时间确定模块,用于基于任务队列所在的层数和所述任务队列的第一累计执行时间,确定所述任务队列到底层任务队列的预期执行时间;依据所述任务队列到底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0161] 所述预期时间确定模块,用于依据各层任务队列到底层任务队列的预期执行时间,确定底层任务队列的预期执行时间;依据底层任务队列的预期执行时间,确定各层任务队列的预期执行时间。
[0162] 所述目标层筛选模块,用于依据所述第一累计执行时间和预期执行时间,确定各层任务队列的调度时间比;依据所述调度时间比筛选执行调度的目标层任务队列。
[0163] 所述入队模块,还用于根据任务的优先级信息确定所述任务初始的任务队列的层数,将所述任务添加到对应层的任务队列中。
[0164] 还包括:虚拟时间确定模块,用于根据任务的优先级信息确定所述任务的时钟系数,依据所述时钟系数和第二累计执行时间确定虚拟执行时间。
[0165] 所述出队模块,用于按照任务的虚拟执行时间,从所述目标层任务队列中获取任务给线程处理。
[0166] 所述入队模块,用于依据所述虚拟执行时间和各层任务队列的执行时间范围,确定所述任务所属任务队列的层数;将所述任务加入到对应层数的任务队列中。
[0167] 综上,多层优先队列通过任务的执行时间,将其分步在不同的层中,将大任务与小任务区分开,并且调度上倾斜到小任务上,大任务对小任务的影响会显著变小,小任务优先的调度策略有利于提升系统的任务吞吐量,并且小查询的执行时间波动更小,稳定性更好。
[0168] 多层任务队列与优先级信息共同作用,使得相同的优先级对于大任务和小任务起到调节作用,在计算资源向高优先级任务倾斜的同时,进一步避免低优先级任务饿死的情况发生。
[0169] 本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
[0170] 本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括服务器、终端设备等设备。
[0171] 本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端等电子设备。图5示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置500。
[0172] 对于一个实施例,图5示出了示例性装置500,该装置具有一个或多个处理器502、被耦合到(一个或多个)处理器502中的至少一个的控制模块(芯片组)504、被耦合到控制模块504的存储器506、被耦合到控制模块504的非易失性存储器(NVM)/存储设备508、被耦合到控制模块504的一个或多个输入/输出设备510,以及被耦合到控制模块504的网络接口512。
[0173] 处理器502可包括一个或多个单核或多核处理器,处理器502可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置500能够作为本申请实施例中所述服务端、终端等设备。
[0174] 在一些实施例中,装置500可包括具有指令514的一个或多个计算机可读介质(例如,存储器506或NVM/存储设备508)以及与该一个或多个计算机可读介质相合并被配置为执行指令514以实现模块从而执行本公开中所述的动作的一个或多个处理器502。
[0175] 对于一个实施例,控制模块504可包括任意适当的接口控制器,以向(一个或多个)处理器502中的至少一个和/或与控制模块504通信的任意适当的设备或组件提供任意适当的接口。
[0176] 控制模块504可包括存储器控制器模块,以向存储器506提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
[0177] 存储器506可被用于例如为装置500加载和存储数据和/或指令514。对于一个实施例,存储器506可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器506可包括双倍数据速率类型四同步动态随机存取存储器(DDR5SDRAM)。
[0178] 对于一个实施例,控制模块504可包括一个或多个输入/输出控制器,以向NVM/存储设备508及(一个或多个)输入/输出设备510提供接口。
[0179] 例如,NVM/存储设备508可被用于存储数据和/或指令514。NVM/存储设备508可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
[0180] NVM/存储设备508可包括作为装置500被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备508可通过网络经由(一个或多个)输入/输出设备510进行访问。
[0181] (一个或多个)输入/输出设备510可为装置500提供接口以与任意其他适当的设备通信,输入/输出设备510可以包括通信组件、音频组件、传感器组件等。网络接口512可为装置500提供接口以通过一个或多个网络通信,装置500可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
[0182] 对于一个实施例,(一个或多个)处理器502中的至少一个可与控制模块504的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器502中的至少一个可与控制模块504的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器502中的至少一个可与控制模块504的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器502中的至少一个可与控制模块504的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
[0183] 在各个实施例中,装置500可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置500可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置500包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
[0184] 其中,检测装置中可采用主控芯片作为处理器或控制模块,传感器数据、位置信息等存储到存储器或NVM/存储设备中,传感器组可作为输入/输出设备,通信接口可包括网络接口。
[0185] 本申请实施例还提供了一种电子设备,包括:处理器;和存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如本申请实施例中一个或多个所述的方法。本申请实施例中存储器中可存储各种数据,如目标文件、文件与应用关联数据等各种数据,还可包括用户行为数据等,从而为各种处理提供数据基础。
[0186] 本申请实施例还提供了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如本申请实施例中一个或多个所述的方法。
[0187] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0188] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0189] 本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0190] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0191] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0192] 尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
[0193] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0194] 以上对本申请所提供的一种任务调度方法及装置、一种电子设备和一种存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。