发明内容
基于此,有必要针对上述技术问题,提供一种能够提高任务调度准确性的任务调度方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种任务调度方法。所述方法包括:
获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
第二方面,本申请还提供了一种任务调度装置。所述装置包括:
获取模块,用于获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
关联模块,用于基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
同步模块,用于基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
排序模块,用于基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
执行模块,用于按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
上述任务调度方法、装置、计算机设备、存储介质和计算机程序产品,通过根据初始任务图在各个待执行任务中确定叶子节点任务和叶子节点关联的待执行任务集,然后根据各个叶子节点任务对应的优先级对关联的待执行任务集中各个待执行任务进行优先级同步,避免由于中间节点的优先级与叶子节点任务的优先级不一致,导致叶子节点任务的执行混乱,能够保证重要的叶子节点任务能优先执行,提高了对各个待执行任务的执行准确性。进一步地,根据各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序,根据执行顺序对各个待执行任务进行执行,能够提高各个待执行任务的任务调度的准确性。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的任务调度方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。服务器104获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;服务器104基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;服务器104基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;服务器104基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;服务器104按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。服务器104可以将执行结果发送到终端102。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种任务调度方法,本实施例以该方法应用于服务器进行举例说明,可以理解的是,该方法也可以应用于终端,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
步骤202,获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的。
其中,初始任务图是指各个待执行任务未确定优先级的任务图。依赖关系是指当前任务的执行依赖在先任务已完成的关系。待执行任务可以是待执行的计算任务、测试任务等。
具体地,服务器获取各个待执行任务,根据各个待执行任务之间的依赖关系建立初始任务图,初始任务图可以是树状图,树中的节点表示待执行任务,节点之间的连接表示待执行任务之间的依赖关系。初始任务图中的任务执行方向是从根节点开始执行,根据各个待执行任务之间的依赖关系,执行到叶子节点结束。服务器响应于任务执行指令获取初始任务图。
步骤204,基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级。
其中,叶子节点任务是指在任务图中作为叶子节点的待执行任务,表征未存在子节点的待执行任务。待执行任务集是指与叶子节点任务存在依赖关系的各个待执行任务的集合,表征叶子节点任务的执行依赖对应的待执行任务集中的各个待执行任务的执行结果。优先级是指待执行任务的优先执行程度。
具体地,服务器根据初始任务图中的树状结构确定各个叶子节点任务,并根据叶子节点任务和各个待执行任务之间的依赖关系确定各个叶子节点任务对应的待执行任务集,各个叶子节点任务对应的待执行任务集可以是初始任务图中各个叶子节点任务对应的子树。一个子树只包括一个叶子节点任务。
服务器可以将初始任务图发送到管理终端,并接收管理终端返回的各个叶子节点任务对应的优先级,并将各个叶子节点任务对应的优先级对各个叶子节点任务进行标记。
步骤206,基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图。
其中,目标任务图是指各个待执行任务已确定优先级的任务图。
具体地,服务器根据各个叶子节点任务对应的优先级对各个叶子节点任务对应的待执行任务集进行优先级同步,将叶子节点任务对应的优先级作为该叶子节点的待执行任务集中各个待执行任务对应的优先级,得到各个待执行任务对应的优先级,根据各个待执行任务对应的优先级得到目标任务图。
步骤208,基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序。
具体地,服务器可以根据目标任务图中各个叶子节点任务对应的优先级确定各个待执行任务集的执行顺序,然后在待执行任务集中根据各个待执行任务之间的依赖关系确定各个待执行任务的执行顺序,得到目标任务图中各个待执行任务对应的执行顺序。
步骤210,按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
具体地,服务器根据各个待执行任务对应的执行顺序判断当前的待执行任务是否满足执行条件,若满足执行条件则执行当前的待执行任务,并按照执行顺序继续执行下一个满足执行条件的待执行任务;若不满足执行条件则暂停执行当前的待执行,按照执行顺序执行下一个满足执行条件的待执行任务,并在执行完成后重新判断上述不满足执行条件的待执行任务是否满足执行条件,直到各个待执行任务执行完成,得到各个待执行任务对应的执行结果。
上述任务调度方法中,通过根据初始任务图在各个待执行任务中确定叶子节点任务和叶子节点关联的待执行任务集,然后根据各个叶子节点任务对应的优先级对关联的待执行任务集中各个待执行任务进行优先级同步,避免由于中间节点的优先级与叶子节点任务的优先级不一致,导致叶子节点任务的执行混乱,能够保证重要的叶子节点任务能优先执行,提高了对各个待执行任务的执行准确性。进一步地,根据各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序,根据执行顺序对各个待执行任务进行执行,能够提高各个待执行任务的任务调度的准确性。
在一个实施例中,步骤206,基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图,包括:
当检测到各个待执行任务中当前待执行任务存在对应的至少两个叶子节点任务时,从至少两个叶子节点任务对应的优先级中确定目标优先级,将目标优先级作为当前待执行任务对应的优先级;
当检测到各个待执行任务中当前待执行任务存在对应的唯一叶子节点任务时,将唯一叶子节点任务对应的优先级作为当前待执行任务对应的优先级;
遍历各个待执行任务,得到各个待执行任务对应的优先级,基于各个待执行任务对应的优先级得到目标任务图。
其中,当前待执行任务是指当前进行优先级同步的待执行任务。目标优先级是指当前待执行任务对应的优先级。
具体地,服务器根据各个叶子节点任务对应的优先级对待执行任务集中的各个待执行任务进行优先级同步,当检测到各个待执行任务中当前待执行任务存在对应的至少两个叶子节点任务时,从至少两个叶子节点任务对应的优先级中确定目标优先级,优选地,将至少两个叶子节点任务对应的优先级中的最高优先级作为目标优先级,将目标优先级作为当前待执行任务对应的优先级。
服务器检测到各个待执行任务中当前待执行任务存在对应的唯一叶子节点任务时,将唯一叶子节点任务对应的优先级作为当前待执行任务对应的优先级。服务器根据上述执行逻辑遍历各个待执行任务,确定各个待执行任务对应的优先级,得到目标任务图。
在一个具体实施例中,服务器可以获取各个叶子节点任务对应的待执行任务集,并遍历各个叶子节点任务对应的待执行任务集中的各个待执行任务,统计各个待执行任务的出现频率,将出现频率超过1的待执行任务作为重合待执行任务,表示对应至少两个叶子节点任务的待执行任务;将出现频率为1的待执行任务作为非重合待执行任务,表示对应唯一叶子节点任务的待执行任务。然后服务器根据待执行任务集和叶子节点任务的对应关系,确定各个重合待执行任务分别对应的各个叶子节点任务和各个非重合待执行任务对应的叶子节点任务。服务器在重合待执行任务对应的各个叶子节点任务的优先级中确定目标优先级,将目标优先级作为重合待执行任务对应的优先级,得到各个重合待执行任务对应的优先级。服务器将非重合待执行任务对应的叶子节点任务的优先级作为非重合待执行任务对应的优先级,得到各个非重合待执行任务对应的优先级。服务器在初始任务图中标记各个重合待执行任务的优先级和各个非重合待执行任务的优先级,得到目标任务图。
在一个具体实施例中,如图3所示,提供一种待执行任务的优先级的示意图。图中,A0表示初始任务图的根节点,F1和F2表示叶子节点任务,F1的优先级为8,F2的优先级为9,箭头表示任务执行方向。框1中的各个待执行任务表示叶子节点任务F2关联的待执行任务集,框2中的各个待执行任务表示叶子节点任务F1关联的待执行任务集。待执行任务A0、B2、C2、D2、E2表示重合待执行任务,对应两个叶子节点任务F1和F2,根据叶子节点任务F1和F2对应的最高优先级9作为重合待执行任务对应的优先级。叶子节点任务F1和F2分别对应的非重合待执行任务的优先级与叶子节点任务F1和F2的优先级相同。
本实施例中,通过检测各个待执行任务中当前待执行任务存在对应的至少两个叶子节点任务,根据至少两个叶子节点任务对应的优先级中确定目标优先级,将目标优先级作为当前待执行任务对应的优先级,能够保证高优先级的叶子节点任务及其对应的待执行任务集的优先级的一致,从而保证高优先级的叶子节点任务能够优先执行,提高了任务调度的准确性。
在一个实施例中,步骤208,基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序,包括:
当检测到各个待执行任务中存在优先级相同的同级待执行任务时,获取同级待执行任务对应的任务执行需求信息;
基于同级待执行任务对应的任务执行需求信息确定同级待执行任务对应的执行顺序。
其中,同级待执行任务是指优先级相同的待执行任务。任务执行需求信息是指预先设置的待执行任务的执行要求信息。
具体地,服务器检测到各个待执行任务中存在优先级相同的同级待执行任务时,获取同级待执行任务对应的任务执行需求信息。同级待执行任务可以是与已执行完成的任务关联的各个待执行任务中优先级相同的待执行任务,比如,如图3中的待执行任务A0执行完成后,待执行任务B1、B2、B3为已执行完成的任务A0关联的待执行任务,B2和B3表示同级待执行任务。
服务器根据各个同级待执行任务对应的任务执行需求信息确定各个同级待执行任务对应的执行顺序。举例来说,任务执行需求信息可以是任务执行日期和任务执行时长。服务器检测到同级待执行任务时,比较各个同级待执行任务对应的任务执行日期,将任务执行日期最早的同级待执行任务作为优先执行的待执行任务。当检测到任务执行日期相同时,比较各个同级待执行任务对应的任务执行时长,将任务执行时长最短的同级待执行任务作为优先执行的待执行任务,得到各个同级待执行任务对应的执行顺序。
在一个具体实施例中,服务器可以预先设置待执行任务列表,用于记录当前需要执行的各个待执行任务,并确定任务执行列表中的各个待执行任务的执行顺序。
服务器可以在检测到目标任务图中根节点对应的待执行任务执行完成后,将与根节点对应的待执行任务关联的各个待执行任务记录到待执行任务列表中,包括优先级相同的待执行任务和优先级不相同的待执行任务,比如,如图3中的根节点对应的待执行任务A0执行完成后,将与待执行任务A0关联的待执行任务B1、B2、B3记录到待执行任务列表中,并对确定待执行任务列表中待执行任务B1、B2、B3的执行顺序。服务器根据待执行任务B1、B2、B3对应的优先级、任务执行日期和任务执行时长依次进行比较,根据比较结果确定执行顺序。
待执行任务列表的执行顺序确定流程比如是:
本实施例中,通过根据任务的优先级、任务执行日期和任务执行时长共同确定任务的执行顺序,保证了最重要任务的优先执行,提高了任务调度的准确性。
在一个实施例中,如图4所示,提供一种任务执行的流程示意图。步骤210,按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果,包括:
步骤402,基于执行顺序在各个待执行任务中确定目标待执行任务,获取目标待执行任务对应的任务资源信息;
步骤404,当检测到任务资源信息满足预设任务执行条件时,执行目标待执行任务,得到目标待执行任务对应的执行结果;
步骤406,基于各个待执行任务的依赖关系确定目标待执行任务对应的依赖待执行任务,按照执行顺序执行目标待执行任务对应的依赖待执行任务;
步骤408,当检测到任务资源信息未满足预设任务执行条件时,暂停执行目标待执行任务,并基于各个待执行任务的依赖关系确定目标待执行任务对应的依赖待执行任务,并暂停执行依赖待执行任务;
步骤410,遍历各个待执行任务,得到满足预设任务执行条件的待执行任务的执行结果。
其中,目标待执行任务是指在当前时刻按照执行顺序优先执行的待执行任务。任务资源信息是指待执行任务执行时需要的资源信息,比如,待执行任务在运行时请求处理机资源、内存资源等。依赖待执行任务是指依赖目标待执行任务的执行完成后进行任务执行的待执行任务。预设任务执行条件是指预先设置好的判断待执行任务是否可以执行的判断条件。
具体地,服务器可以获取待执行任务列表中的各个待执行任务,作为当前执行顺序对应的各个待执行任务。服务器按照当前执行顺序依次在各个待执行任务中确定目标待执行任务,获取目标待执行任务对应的任务资源信息。服务器检测到目标待执行任务对应的任务资源信息满足预设任务执行条件时,确定目标待执行任务为可执行任务,执行该可执行任务,得到可执行任务的执行结果。服务器检测到可执行任务投递完成后,获取可执行任务对应的依赖待执行任务,将可执行任务的记录更新为依赖待执行任务的记录。服务器检测到目标待执行任务对应的任务资源信息未满足预设任务执行条件时,将目标待执行任务作为可暂停任务,不进行处理,并在待执行任务列表中保留可暂停任务的记录。依据上述执行逻辑,服务器按照当前执行顺序依次得到各个待执行任务的执行情况,比如,当前执行顺序对应的各个可执行任务,或当前执行顺序对应的可执行任务和可暂停任务,并得到当前执行顺序对应的可执行任务的执行结果。
然后服务器可以在预设时间段后,重新获取待执行任务列表中的各个待执行任务,可以包括依赖待执行任务和可暂停任务。预设时间段可以超过各个待执行任务中的最大任务执行时长,也可以是各个待执行任务的平均任务执行时长。服务器根据各个待执行任务对应的任务执行需求信息重新对各个待执行任务进行排序,得到各个待执行任务对应的更新执行顺序,并按照更新执行顺序执行各个待执行任务,得到更新执行顺序对应的可执行任务的执行结果。依据上述执行逻辑,服务器依次在待执行任务列表中的各个待执行任务中确定可执行任务,执行可执行任务并根据可执行任务对应的依赖待执行任务更新待执行任务列表,直到执行叶子节点任务,得到目标任务图中各个待执行任务对应的执行结果。
举例来说,如图3所示,待执行任务列表中各个待执行任务为B1、B2、B3,并且各个待执行任务为B1、B2、B3的当前执行顺序为B2>B3>B1,服务器按照当前执行顺序依次判断各个待执行任务B1、B2、B3是否满足预设任务执行条件。当检测到待执行任务B2的任务资源信息满足预设任务执行条件时,判断待执行任务B2为可执行任务并进行执行,并获取可执行任务B2对应的依赖待执行任务C2对待执行任务列表中可执行任务B2进行更新,将依赖待执行任务C2作为下一次排序的对象;当检测到当前执行顺序对应的待执行任务B3和B1对应的任务资源信息未满足预设任务执行条件时,将待执行任务B3和B1作为可暂停任务,不进行处理,并将可暂停任务B3和B1作为下一次排序的对象。
服务器在预设时间段后,获取待执行任务列表中的各个待执行任务为B1、C2、B3,按照各个待执行任务B1、C2、B3对应的任务执行需求信息进行排序,得到各个待执行任务B1、C2、B3对应的更新执行顺序为C2>B3>B1,并按照更新执行顺序依次执行各个待执行任务,直到目标任务图中叶子节点任务F1和F2执行完成。
在一个具体实施例中,如图5所示,提供一种任务执行的流程示意图。服务器获取预设任务执行条件,获取待执行任务列表,根据待执行任务列表中的各个待执行任务对应的执行顺序,判断待执行任务列表中的目标待执行任务对应的任务资源信息是否满足预设任务执行条件,若满足则投递目标待执行任务并更新待执行任务列表;若不满足则返回到待执行任务列表中重新确定目标待执行任务进行判断。
本实施例中,通过设置待执行任务列表,待执行任务列表包括当前需要执行的各个待执行任务,并根据任务执行需求信息确定各个待执行任务的执行顺序,根据执行顺序和预设任务执行条件执行可执行任务。通过可执行任务执行完成后在待执行任务列表中实时更新依赖待执行任务,并在预设时间段后根据任务执行需求信息重新更新各个待执行任务对应的执行顺序,能够保证需要优先执行的任务始终排序在最前面,从而提高了任务调度的准确性。
在一个实施例中,步骤404,当检测到任务资源信息满足预设任务执行条件时,执行目标待执行任务,得到目标待执行任务对应的执行结果,包括
获取目标待执行任务对应的优先级,基于优先级确定可使用资源信息;
当任务资源信息未超过可使用资源信息时,执行目标待执行任务,得到目标待执行任务对应的执行结果。
其中,可使用资源是指服务器执行任务时可提供的资源。
具体地,服务器可以预先设置各个优先级对应的可使用资源信息,表示预留给各个优先级对应的待执行任务的资源信息。服务器获取目标待执行任务对应的优先级,根据目标待执行任务对应的优先级确定目标待执行任务对应的可使用资源信息。服务器检测到目标待执行任务对应的可使用资源信息未超过剩余可使用资源,并且任务资源信息未超过可使用资源时,表示目标待执行任务满足预设任务执行条件,执行目标待执行任务,得到目标待执行任务对应的任务结果。剩余可使用资源是指服务器中剩余可用于执行任务的资源。服务器中未执行任务时的剩余可使用资源等于整体资源。整体资源表示服务器中的所有资源,比如,内存资源等。
在一个具体实施例中,服务器预先设置预留优先级、预留资源和预留固定资源。预留优先级表示各个时间段优先执行任务的优先级。预留资源表示各个预留优先级对应的可使用资源,各个预留优先级对应的预留资源可超过各个优先级对应的待执行任务的任务资源信息,比如,预留优先级为9的预留资源可超过优先级为9的待执行任务的任务资源信息。预留固定资源表示不用于执行任务的固定资源,用于避免整体资源被完全消耗。
服务器获取目标待执行任务对应的优先级,当检测到目标待执行任务对应的优先级大于或等于预留优先级时,获取目标待执行任务对应的预留资源,并计算预留资源与整体资源之间的资源差异。当检测到目标待执行任务对应的资源差异超过预留固定资源时,判断目标待执行任务满足预设任务执行条件,执行目标待执行任务,得到目标待执行任务对应的执行结果。
当检测到目标待执行任务对应的优先级小于预留优先级时,计算目标待执行任务对应的优先级的可使用资源与整体资源之间的资源差异,检测到目标待执行任务对应的资源差异超过预留优先级对应的预留资源时,判断目标待执行任务满足预设任务执行条件,执行目标待执行任务,得到目标待执行任务对应的执行结果。
举例来说,如图3所示,待执行任务列表中的各个待执行任务为B1、B2、B3,分别对应的优先级为8、9、9。假设各个待执行任务对应的执行顺序为B2>B3>B1,整体资源为100,预留优先级为9,预留优先级9对应的预留资源为40,预留固定资源为5。服务器检测到目标待执行任务B2对应的优先级为9等于预留优先级9时,计算目标待执行任务B2对应的预留源与整体资源之间的资源差异为100-40=60,检测到目标待执行任务B2对应的资源差异60超过预留固定资源5时,判断目标待执行任务B2为可执行任务。
然后服务器根据执行顺序确定目标待执行任务B3,检测目标待执行任务B3对应的优先级为9等于预留优先级9,剩余可使用资源为60,目标待执行任务B3对应的预留资源与剩余可使用资源之间的资源差异为60-40=20,检测到目标待执行任务B3对应的资源差异20超过预留固定资源5时,判断目标待执行任务B3为可执行任务。
服务器根据执行顺序确定目标待执行任务B1,检测目标待执行任务B1对应的优先级为8小于预留优先级9,剩余可使用资源为20,目标待执行任务B1的优先级8对应的可使用资源为10,计算目标待执行任务B1对应的可使用资源与剩余可使用资源之间的资源差异为20-10=10,检测到目标待执行任务B1对应的资源差异10超过预留固定资源5时,判断目标待执行任务B1为可执行任务。或者计算目标待执行任务B1对应的可使用资源与整体资源之间的资源差异为100-10=90,并计算预留优先级9对应的预留资源和预留固定资源的和为40+40+5=85,检测到目标待执行任务B1对应的资源差异90超过预留资源和预留固定资源的和85时,判断目标待执行任务B3为可执行任务。
本实施例中,通过预先设置预留优先级、预留资源和预留固定资源判断各个待执行任务是否满足预设任务执行条件,将能执行的任务立即执行,将暂停执行的任务保留到下一轮执行,并且重新确定执行顺序,能够在保证最重要的任务优先执行的基础上实现资源利用率的最大化。
在一个实施例中,步骤210,按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果,包括:
基于各个待执行任务对应的优先级确定各个待执行任务对应的执行时间段;
按照各个待执行任务对应的执行顺序在执行时间段对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
其中,执行时间段是指预先设置的执行任务的时间段。
具体地,服务器可以获取各个优先级对应的执行时间段,根据优先级对应的执行时间段确定优先级对应的各个待执行任务的执行时间段。服务器按照各个待执行任务的执行顺序在对应的执行时间段内执行各个待执行任务,得到各个待执行任务对应的执行结果。
在一个具体实施例中,服务器可以预先设置各个执行时间段对应的优先级,作为预留优先级。服务器检测到当前待执行任务的优先级大于或等于当前时间段对应的预留优先级时,执行当前待执行任务,得到当前待执行任务对应的执行结果。
服务器经过预设时间段后,统计优先级大于或等于当前时间段对应的预留优先级的各个待执行任务的执行完成比例。当检测到任务执行完成比例达到预设比例阈值时,根据预留优先级降序规则对当前时间段的预留优先级进行更新,得到更新后的预留优先级。并按照更新后的预留优先级判断各个待执行任务是否执行,得到各个待执行任务对应的执行结果。
举例来说,预先设置时间段01:00-01:30对应的预留优先级为9,根据预留优先级执行优先级为9的各个待执行任务。当检测到优先级为9的各个待执行任务的执行完成比例为80%,并且80%>75%时,根据预留优先级降序规则将预留优先级更新为8,得到更新后的预留优先级8,并按照更新后的预留优先级8执行优先级为8的各个待执行任务。以此进行,直到得到各个待执行任务对应的执行结果。
本实施例中,通过设置各个预留优先级对应的执行时间段,并检测到当前预留优先级对应的任务执行比例达到预设比例阈值时,更新预留优先级,并执行下一个预留优先级对应的待执行任务,能够避免出现资源的峰谷使用情况,从而提高了资源利用率。
在一个具体实施例中,如图6所示,提高一种判断任务执行的流程示意图。服务器获取各个待执行任务对应的历史消耗资源和整体资源。将各个待执行任务对应的历史消耗资源和整体资源写入配置文件中。服务器根据各个待执行任务的依赖关系生成初始任务图,比如DAG(Directed Acyclic Graph,有向无环图)。然后服务器获取预先设置好的基线,即各个叶子节点任务对应的优先级,根据基线对初始任务图中的各个待执行任务进行优先级同步,得到目标任务图,并生成各个待执行任务的任务批量处理实例。
服务器开始执行各个待执行任务,获取预留信息,预留信息包括预留优先级、预留资源和预留固定资源。服务器获取待执行任务列表,确定待执行任务列表中的各个待执行任务的执行顺序,获取目标待执行任务。
服务器判断目标待执行任务对应的优先级是否大于或等于预留优先级,若是则判断目标待执行任务对应的资源差异是否超过预留固定资源,若否则判断目标待执行任务对应的资源差异是否超过预留优先级对应的预留资源。
若目标待执行任务对应的资源差异超过预留固定资源,则将投递目标待执行任务,扣除资源运行目标待执行任务,运行结束后进行资源回收,目标待执行任务运行结束。若未超过预留固定资源,则返回到获取待执行任务列表的步骤,等待下一次执行。
若目标待执行任务对应的资源差异超过预留优先级对应的预留资源,则将投递目标待执行任务,扣除资源运行目标待执行任务,运行结束后进行资源回收,目标待执行任务运行结束。若未超过预留优先级对应的预留资源,则返回到获取待执行任务列表的步骤,等待下一次执行。
在一个具体实施例中,任务调度方法可用于报表生成场景。目标任务图中的根节点对应的待执行任务可以是获取原始数据任务,目标任务图中的基线,即叶子节点任务可以是报表生成任务,叶子节点任务对应的待执行任务集中的各个待执行任务可以是各个数据处理任务,比如,数据筛选任务、数据分类任务、数据计算任务、数据汇总任务等。
服务器根据报表的重要程度确定优先执行的目标叶子节点任务和其对应的目标待执行任务集。然后服务器从根节点对应的待执行任务开始执行,并按照执行顺序执行目标待执行任务集中的各个数据处理任务,最终执行到报表生成任务,执行完成后得到目标报表,服务器将目标报表发送到终端显示。
本实施例中,通过按照执行顺序和优先级对目标任务图中的各个待执行的数据处理任务进行执行,能够提高各个数据处理任务的调度效率,从而保证重要的任务优先执行,并通过对数据处理后生成的报表进行保存和展示,能够节省服务器存储资源,并方便展示,
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的任务调度方法的任务调度装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个任务调度装置实施例中的具体限定可以参见上文中对于任务调度方法的限定,在此不再赘述。
在一个实施例中,如图7所示,提供了一种任务调度装置700,包括:获取模块702、关联模块704、同步模块706、排序模块708和执行模块710,其中:
获取模块702,用于获取初始任务图,初始任务图是根据各个待执行任务的依赖关系建立的;
关联模块704,用于基于初始任务图在各个待执行任务中确定各个叶子节点任务和各个叶子节点任务关联的待执行任务集,并获取各个叶子节点任务对应的优先级;
同步模块706,用于基于优先级对待执行任务集中的各个待执行任务进行优先级同步,得到目标任务图;
排序模块708,用于基于目标任务图中各个待执行任务对应的优先级和依赖关系确定各个待执行任务对应的执行顺序;
执行模块710,用于按照各个待执行任务对应的执行顺序对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
在一个实施例中,同步模块706,包括:
遍历单元,用于当检测到各个待执行任务中当前待执行任务存在对应的至少两个叶子节点任务时,从至少两个叶子节点任务对应的优先级中确定目标优先级,将目标优先级作为当前待执行任务对应的优先级;当检测到各个待执行任务中当前待执行任务存在对应的唯一叶子节点任务时,将唯一叶子节点任务对应的优先级作为当前待执行任务对应的优先级;遍历各个待执行任务,得到各个待执行任务对应的优先级,基于各个待执行任务对应的优先级得到目标任务图。
在一个实施例中,排序模块708,包括:
同级执行单元,用于当检测到各个待执行任务中存在优先级相同的同级待执行任务时,获取同级待执行任务对应的任务执行需求信息;基于同级待执行任务对应的任务执行需求信息确定同级待执行任务对应的执行顺序。
在一个实施例中,执行模块710,包括:
依赖执行单元,用于基于执行顺序在各个待执行任务中确定目标待执行任务,获取目标待执行任务对应的任务资源信息;当检测到任务资源信息满足预设任务执行条件时,执行目标待执行任务,得到目标待执行任务对应的执行结果;基于各个待执行任务的依赖关系确定目标待执行任务对应的依赖待执行任务,按照执行顺序执行目标待执行任务对应的依赖待执行任务;当检测到任务资源信息未满足预设任务执行条件时,暂停执行目标待执行任务,并基于各个待执行任务的依赖关系确定目标待执行任务对应的依赖待执行任务,并暂停执行依赖待执行任务;遍历各个待执行任务,得到满足预设任务执行条件的待执行任务的执行结果。
在一个实施例中,执行模块710,包括:
执行资源单元,用于获取目标待执行任务对应的优先级,基于优先级确定可使用资源信息;当任务资源信息未超过可使用资源信息时,执行目标待执行任务,得到目标待执行任务对应的执行结果。
在一个实施例中,执行模块710,包括:
按时执行单元,用于基于各个待执行任务对应的优先级确定各个待执行任务对应的执行时间段;按照各个待执行任务对应的执行顺序在执行时间段对各个待执行任务进行执行,得到各个待执行任务对应的执行结果。
上述任务调度装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储初始任务图。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种任务调度方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种任务调度方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8-9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。