任务调度方法、装置、设备及存储介质
技术领域
本申请实施例涉及互联网技术领域,涉及但不限于一种任务调度方法、装置、设备及存储介质。
背景技术
目前,在实现对计算机上所运行的任务进行调度时,传统的状态机制,通常是通过设定一个二维矩阵状态表,通过该二维矩阵状态表鉴别状态机间跳转的合法性,从而实现状态间的递归跳转并执行每个状态的任务。即在状态有限的情况下,可以快速有效得实现跳转,且每次进入一个状态时,即执行该状态所对应的一系列任务。
但是,当状态发生改变时,例如增加或删除状态时,对应的任务也会发生改变,此时需要维护状态机的所有上下文,即对于变化的状态都需要进行重构,显然,维护状态机的所有上下文的维护成本较高,且维护效率低下。
发明内容
本申请实施例提供一种任务调度方法、装置、设备及存储介质,能够保证任务调度的上下文逻辑,并提高任务调度的上下文维护效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种任务调度方法,包括:当控制节点的状态发生变化时,控制节点确定变化后的状态所对应的待执行任务集合;根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列;按照所述待执行任务序列依次将每一所述待执行任务分发给至少一个分布式节点,以实现对所述待执行任务进行调度。
本申请实施例提供一种任务调度方法,包括:分布式节点接收控制节点按照待执行任务序列依次发送的待执行任务,其中,所述待执行任务序列是当控制节点的状态发生变化时,控制节点根据变化后的状态所对应的待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序得到的;执行所述待执行任务。
本申请实施例提供一种任务调度装置,包括:确定模块,用于当控制节点的状态发生变化时,确定变化后的状态所对应的待执行任务集合;排序模块,用于根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列;分发模块,用于按照所述待执行任务序列依次将每一所述待执行任务分发给至少一个分布式节点,以实现对所述待执行任务进行调度。
本申请实施例提供一种任务调度装置,包括:接收模块,用于接收控制节点按照待执行任务序列依次发送的待执行任务,其中,所述待执行任务序列是当控制节点的状态发生变化时,控制节点根据变化后的状态所对应的待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序得到的;执行模块,用于执行所述待执行任务。
本申请实施例提供一种任务调度设备,包括:存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时实现上述的方法。本申请实施例提供一种存储介质,存储有可执行指令,用于引起处理器执行时实现上述的方法。
本申请实施例具有以下有益效果:当控制节点的状态发生变化时,控制节点确定变化后的状态所对应的待执行任务集合;并根据待执行任务集合中每一待执行任务的任务开始时刻,对待执行任务进行排序,得到待执行任务序列。这样,由于对状态变化后的待执行任务进行排序,可以形成一个具有一定顺序的待执行任务序列,从而在进行任务调度时,可以按照该待执行任务序列依次向分布式节点分发待执行任务,而无需再维护任务调度的上下文逻辑,从而能够提高任务调度的上下文维护效率。
附图说明
图1A是本申请实施例提供的任务调度***的一个可选的架构示意图;
图1B是本申请实施例提供的分布式***应用于区块链***的一个可选的结构示意图;
图1C是本申请实施例提供的区块结构的一个可选的示意图;
图2是本申请实施例提供的终端的结构示意图;
图3是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图4A是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图4B是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图5是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图6A是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图6B是本申请实施例提供的任务调度方法的一个可选的流程示意图
图7是本申请实施例提供的任务调度方法的一个可选的流程示意图;
图8A是本申请实施例提供的触发器与接收器的一种可选的交互示意图;
图8B是本申请实施例提供的触发器与接收器的一种可选的交互示意图
图9是本申请实施例提供的控制节点的结构示意图;
图10是本申请实施例按照时间顺序调度任务的流程示意图;
图11是本申请实施例角色扩展的实现过程示意图;
图12是本申请实施例平行扩展的实现过程示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。除非另有定义,本申请实施例所使用的所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的含义相同。本申请实施例所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)控制节点:是位于终端设备上的进程,其中控制节点是服务进程的中心节点,在实现当前服务进程时,控制节点是唯一的。控制节点可以采用广播的方式向分布式节点发送要执行的任务,例如,控制节点可以通过控制节点中的触发器向分布式节点发送任务。
2)分布式节点:相比于所述控制节点,是跨服务跨互联网协议地址(InternetProtocol,IP)跨物理机的进程。所述分布式节点的数量不唯一,可以具有多个分布式节点,并且每个分布式节点的功能是不对称的。每个分布式节点均具有接收器,用于接收控制节点发送的任务,且所述分布式节点中包括任务对应的指令列表。当任一分布式节点接收到控制节点广播的任务之后,均会在该指令列表中查找对应的操作指令,并执行该操作指令,以完成对控制节点发送的任务的执行。
3)触发器:位于所述控制节点上,与任务列表共同形成所述控制节点。所述触发器用于向分布式节点中的接收器发送广播信号,实现向分布式节点广播任务。
4)接收器:位于所述分布式节点上,与指令列表共同形成所述分布式节点。所述接收器用于接收触发器发送的广播信号,并在所述指令列表中查找对应的操作指令。
为了更好地理解本申请实施例中提供的任务调度方法,首先对相关技术中的任务调度方法进行分析说明。
相关技术中在进行任务调度时,通常是设定一个二维矩阵状态表,如下表1,其中,在该二维的表格中,将当前状态(例如,s0状态、s1状态和s2状态)记录在横行上;将触发状态发生变化的事件(例如,e0事件、e1事件和e2事件)记录在宗列中;“--”表示空(不执行动作,也不进行状态转移);“an/sn”表示执行动作an,同时状态跳转为sn。
表1中所示的状态跳转过程可以是:在s0状态,如果发生e0事件,那么就执行a0动作,并保持状态不变,维持s0状态;如果发生e1事件,那么就执行a1动作,并将状态跳转到s1状态;如果发生e2事件,那么就执行a2动作,并将状态跳转到s2态。在s1状态,如果发生e2事件,那么就执行a2动作,并将状态跳转到s2态;在s2状态,如果发生e0事件,那么就执行a0动作,并将状态跳转到s0态。
表1二维矩阵状态表
相关技术中,通过该二维矩阵状态表,能够鉴别状态机间跳转的合法性,实现状态间的递归跳转并执行每个状态的任务。在状态有限的情况下,可以快速有效得实现跳转实现。每次进入一个状态时,即执行一次状态所对应的一系列任务。相关技术的特点是状态跳转灵活,时间上可以对任务进行无序调度。
但是,相关技术中基于二维矩阵状态表的状态跳转过程,需要维护每一状态的上下文,即需要明确跳转到当前状态的前一个历史状态、跳转到当前状态所发生的事件和跳转到当前状态所执行的动作。显然,每一状态之间的关系是确定的,也是不可更改的。那么,当状态发生改变时,例如增加或删除某一状态时,则需要明确所增加或所删除的状态与其他状态之间的关系,即明确所增加或所删除的状态与其他状态之间的上下文逻辑。也就是说,针对于变化的状态,都需要进行重构,以保障其他所有状态与新增状态或删除状态后的其他剩余状态之间相互跳转的合法性,显然,相关技术中维护状态之间上下文逻辑和状态间跳转合法性的成本极高,且由于需要进行状态间的重构,因此在维护上效率低下。
基于相关技术所存在的上述至少一个问题,本申请实施例提供一种任务调度方法、装置、设备及存储介质,能够提高任务调度的上下文维护效率,并降低维护成本。
下面说明本申请实施例提供的任务调度设备的示例性应用,本申请实施例提供的设备可以实施为笔记本电脑,平板电脑,台式计算机,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端。下面,将说明设备实施为终端时的示例性应用。
参见图1A,图1A是本申请实施例提供的任务调度***10的一个可选的架构示意图,为实现支撑一个任务在控制节点与分布式节点之间的调度,终端100(示例性示出了终端100-1和终端100-2)通过网络200连接服务器300,网络200可以是广域网或者局域网,又或者是二者的组合。
终端100在任务展示页面110(示例性示出了任务展示页面110-1和任务展示页面110-2)上显示应用(Application,APP)的当前界面,例如,所述APP可以是游戏APP。其中,终端100-1中运行有控制节点120的进程,能够实现本申请控制节点的功能,终端100-2中运行有分布式节点130的进程,能够实现本申请分布式节点的功能。当然,控制节点和分布式节点也可以运行在同一个终端上,或者多个分布式节点运行在同一个终端上。通过当终端100-1上的控制节点120的状态发生变化时,控制节点120通过网络200从服务器300获取待执行任务,并确定变化后的状态所对应的待执行任务集合;然后根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列;最后,按照所述待执行任务序列依次将每一所述待执行任务经过网络200分发给终端100-2上的分布式节点130,以实现向终端100-2上的分布式节点130对所述待执行任务进行调度。当分布式节点130完成任务之后,通过网络200向控制节点120返回确认完成信号。
本申请实施例涉及的任务调度***10也可以是由客户端(例如,游戏APP的客户端)、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式***。
这里以分布式***为区块链***为例,参见图1B,图1B是本申请实施例提供的分布式***101应用于区块链***的一个可选的结构示意图,由多个节点102(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端103形成,节点之间形成组成的点对点(Peer To Peer,P2P)网络,P2P协议是一个运行在传输控制协议(Transmission ControlProtocol,TCP)协议之上的应用层协议。在分布式***中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作***层和应用层。
参见图1B示出的区块链***中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链***中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链***中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币。
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链***中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链***中节点提交的记录数据。
4)共识(Consensus),是区块链网络中的一个过程,用于在涉及的多个节点之间对区块中的交易达成一致,达成一致的区块将被追加到区块链的尾部,实现共识的机制包括工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、股份授权证明(Delegated Proof-of-Stake,DPoS)、消逝时间量证明(Proof of Elapsed Time,PoET)等。
参见图1C,图1C是本申请实施例提供的区块结构(Block Structure)的一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
参见图2,图2是本申请实施例提供的终端100的结构示意图,图2所示的终端100包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。终端100中的各个组件通过总线***240耦合在一起。可理解,总线***240用于实现这些组件之间的连接通信。总线***240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线***240。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(Digital Signal Processor,DSP),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(Read Only Memory,ROM),易失性存储器可以是随机存取存储器(Random Access Memory,RAM)。本申请实施例描述的存储器250旨在包括任意适合类型的存储器。在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作***251,包括用于处理各种基本***服务和执行硬件相关任务的***程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(Universal Serial Bus,USB)等;
输入处理模块253,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图2示出了存储在存储器250中的一种任务调度装置254,该任务调度装置254可以是包括控制节点的终端100-1中的任务调度装置,其可以是程序和插件等形式的软件,包括以下软件模块:确定模块2541、排序模块2542和分发模块2543,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
当然,在其他实施例中,任务调度装置也可以是包括分布式节点的终端100-2中的任务调度装置(图中未示出),其也可以是程序和插件等形式的软件,包括以下软件模块:接收模块和执行模块。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的任务调度方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(Application Specific Integrated Circuit,ASIC)、DSP、可编程逻辑器件(Programmable Logic Device,PLD)、复杂可编程逻辑器件(Complex ProgrammableLogic Device,CPLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他电子元件。
下面将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的任务调度方法。
参见图3,图3是本申请实施例提供的任务调度方法的一个可选的流程示意图,将结合图3示出的步骤进行说明。
步骤S301,当控制节点的状态发生变化时,控制节点确定变化后的状态所对应的待执行任务集合。
这里,所述控制节点可以是区块链***中的一个节点。在控制节点的状态发生变化之前,控制节点处于历史状态,当控制节点处于历史状态时,对应有至少一个历史待执行任务。当控制节点的状态发生变化时,控制节点的状态由历史状态变为当前状态,当前状态对应有至少一个待执行任务,所述至少一个待执行任务可以包括全部所述历史待执行任务,也可以包括部分所述历史待执行任务,也可以不包括所述历史待执行任务。
本申请实施例中,所述至少一个待执行任务形成所述待执行任务集合。
步骤S302,根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列。
这里,每一待执行任务具有属性信息,所述属性信息可以至少包括以下之一:待执行任务的任务开始时刻、任务结束时刻、任务标识(Identification,ID)、触发时间段、重复执行间隔、是否阻塞和执行时长等。
其中,任务开始时刻是指当当前时间达到该任务开始时刻时,则通过控制节点的触发器向分布式节点发送该任务,以实现对任务的执行;任务结束时刻是指当当前时间超过该任务结束时刻时,则标记该任务完成,不再向分布式节点调度该任务;触发时间段是指起始时刻为任务开始时刻,终止时刻为任务结束时刻的时间段;重复执行间隔是指当当前执行的任务是阻塞任务时,对于未执行的阻塞任务,在触发时间段内,会按照该重复执行间隔重复触发分布式节点执行这些未执行的阻塞任务,直到任务执行完成;是否阻塞是指判断待执行任务是阻塞式任务还是非阻塞式任务;执行时长是指任务被发送给分布式节点到分布式节点返回执行完成信号之间的时长。
本申请实施例中,按照每一待执行任务的任务开始时刻的时间先后顺序,对待执行任务集合中的全部待执行任务进行排序,形成所述待执行任务序列,在所述待执行任务序列中,是按照任务开始时刻的先后顺序排列待执行任务,任务开始时刻越靠前的待执行任务位于所述待执行任务序列的最上方。
本申请实施例通过排序之后所形成的待执行任务序列,只关心待执行任务的任务开始时刻,不用再关注跳转到当前任务对应状态的触发事件和跳转到当前任务对应状态所执行的动作等其他上下文信息,因此所述待执行任务序列需要维护的内容更少。
在一些实施例中,所述待执行任务和每一待执行任务的属性信息均可以存储在所述区块链中。
步骤S303,按照所述待执行任务序列依次将每一所述待执行任务分发给至少一个分布式节点,以实现对所述待执行任务进行调度。
这里,当确定出所述待执行任务序列之后,按照所述待执行任务序列中全部待执行任务的排列顺序,从任务开始时刻最接近当前时间的待执行任务开始,依次向分布式节点发送待执行任务。
需要说明的是,所述分布式节点也可以是区块链***中的一个节点。所述分布式节点可以是一个或多个,当所述分布式节点为一个时,所述控制节点向确定的一个分布式节点发送待执行任务,当所述分布式节点为多个时,所述控制节点同时向多个分布式节点发送所述待执行任务,例如,所述控制节点可以以广播的形式向多个分布式节点广播所述待执行任务。
本申请实施例中,可以是所述控制节点中的触发器向分布式节点广播待执行任务,分布式节点中的接收器接收控制节点广播的该待执行任务。
需要说明的是,在分布式节点的接收器接收到待执行任务之后,接收器解析该待执行任务,并在分布式节点的指令列表中匹配出与所述待执行任务对应的操作指令,执行所述操作指令。也就是说,本申请实施例中,分布式节点执行所述待执行任务可以是执行与所述待执行任务对应的操作指令。
本申请实施例中,控制节点将所述待执行任务序列中的待执行任务依次发送给分布式节点,实现了向所述分布式节点调度所述待执行任务。
本申请实施例提供的任务调度方法,当控制节点的状态发生变化时,控制节点确定变化后的状态所对应的待执行任务集合;并根据待执行任务集合中每一待执行任务的任务开始时刻,对待执行任务进行排序,得到待执行任务序列,从而按照该待执行任务序列进行任务调度。这样,由于对状态变化后的待执行任务进行排序,可以形成一个具有按照任务开始时刻排序的待执行任务序列,从而在进行任务调度时,可以按照该待执行任务序列依次向分布式节点分发待执行任务,而无需再维护任务调度的上下文逻辑,从而能够提高任务调度的上下文维护效率。
在一些实施例中,所述控制节点的状态发生变化可以是为所述控制节点增加新的一个或多个状态,那么参见图4A,图4A是本申请实施例提供的任务调度方法的一个可选的流程示意图,图4A示出了图3中的步骤S301可以通过以下步骤实现:
步骤S401,当所述控制节点增加新的状态时,所述控制节点确定所述新的状态对应的待执行任务。
步骤S402,通过所述新的状态对应的待执行任务和增加所述新的状态之前的历史待执行任务,形成所述待执行任务集合。
本申请实施例中,当增加新的状态时,确定新的状态对应的待执行任务,并根据所述新的状态对应的待执行任务和历史待执行任务,确定待执行任何集合,也就是将新的状态对应的新的待执行任务添加到历史待执行任务集合中。
举例来说,控制节点的状态包括状态A、状态B和状态C,其中,状态A对应的待执行任务包括任务A1和A2,状态B对应的待执行任务包括任务B1和B2,状态C对应的待执行任务包括任务C1和C2。现在对控制节点新增状态D,状态D对应的待执行任务包括任务D1和D2,那么,所述历史待执行任务即为任务A1、A2、B1、B2、C1和C2,新的待执行任务为任务D1和D2,因此,所形成的待执行任务集合中包括任务A1、A2、B1、B2、C1、C2、D1和D2。
在一些实施例中,所述控制节点的状态发生变化可以是为所述控制节点删除一个或多个状态,那么参见图4B,图4B是本申请实施例提供的任务调度方法的一个可选的流程示意图,图4B示出了图3中的步骤S301还可以通过以下步骤实现:步骤S411,当所述控制节点删除状态时,所述控制节点确定删除所述状态之后所剩余的状态对应的剩余待执行任务。步骤S412,通过所述剩余待执行任务形成所述待执行任务集合。
本申请实施例中,当删除状态时,确定删除所述状态之后所剩余的状态对应的剩余待执行任务,并根据剩余待执行任务确定待执行任何集合,也就是将删除的状态对应的待执行任务删除,保留剩余状态对应的剩余待执行任务。
举例来说,控制节点的状态包括状态A、状态B和状态C,其中,状态A对应的待执行任务包括任务A1和A2,状态B对应的待执行任务包括任务B1和B2,状态C对应的待执行任务包括任务C1和C2。现在对控制节点删除状态C,那么,剩余状态包括状态A和B,剩余待执行任务包括任务A1、A2、B1和B2,因此,所形成的待执行任务集合中包括任务A1、A2、B1和B2。
在一些实施例中,所述控制节点的状态发生变化还可以是更新所述控制节点的状态,其中,这里的更新是指将所述控制节点的任一状态更新为另一状态。
举例来说,控制节点的状态包括状态A、状态B和状态C,其中,状态A对应的待执行任务包括任务A1和A2,状态B对应的待执行任务包括任务B1和B2,状态C对应的待执行任务包括任务C1和C2。现在对控制节点的状态进行更新,将状态C更新为状态D,且状态D对应的待执行任务包括任务D1和D2,则控制节点当前的状态包括状态A、B和D,所形成的待执行任务集合中包括任务A1、A2、B1、B2、D1和D2。
在一些实施例中,参见图5,图5是本申请实施例提供的任务调度方法的一个可选的流程示意图,图5示出了图3中的步骤S303可以通过以下步骤实现:
步骤S501,确定所述待执行任务序列中的每一所述待执行任务的触发时间段。这里,所述触发时间段的起始时刻为所述待执行任务的任务开始时刻,所述触发时间段的终止时刻为所述待执行任务的任务结束时刻。在所述触发时间段内,均可以向分布式节点发送所述待执行任务。
步骤S502,将所述触发时间段包含当前时刻的待执行任务确定为目标待执行任务。
这里,所述触发时间段包含当前时刻的待执行任务,是指当前时刻在该待执行任务的触发时间段之内,举例来说,某一待执行任务K0的触发时间段是8:00到9:00,当前时刻为8:30,因此可将待执行任务K0确定为所述目标待执行任务。在一些实施例中,所述目标待执行任务也可以存储在所述区块链中。
在一些实施例中,步骤S502还可以采用以下步骤实现:
步骤S5021,将所述触发时间段包含当前时刻,且未被任一所述分布式节点所执行的待执行任务,确定为所述目标待执行任务。
这里,在确定目标待执行任务时,可以首先确定所述待执行任务序列中未被分布式节点执行的待执行任务,然后在这些未被执行的待执行任务中确定目标待执行任务。
步骤S503,将所述目标待执行任务和所述待执行任务序列中位于所述目标待执行任务之后的其他待执行任务,依次分发给至少一个分布式节点,以实现向每一所述分布式节点对所述待执行任务进行调度。
这里,当确定出所述目标待执行任务之后,所述目标待执行任务即为当前要发送给分布式节点的待执行任务,并且,对于该目标待执行任务之后的其他待执行任务,也是之后要依次发送给分布式节点的,因此,将目标待执行任务和待执行任务序列中位于目标待执行任务之后的其他待执行任务,依次分发给至少一个分布式节点。
本申请实施例提供的任务调度方法,将触发时间段包含当前时刻,且未被任一所述分布式节点所执行的待执行任务,确定为所述目标待执行任务,并将目标待执行任务和目标待执行任务之后的其他待执行任务依次发给分布式节点。如此,能够保证向分布式节点发送的待执行任务均是有效的任务,保证待执行任务的有序发送,避免将超时任务或者过期任务发给分布式节点。
在一些实施例中,所述待执行任务包括阻塞式任务;所述阻塞式任务是指在没有完成该阻塞式任务的情况下,该阻塞式任务后续的所有任务都不能被执行。参见图6A,图6A是本申请实施例提供的任务调度方法的一个可选的流程示意图,图6A示出了图3中的步骤S303可以通过以下步骤实现:
步骤S601,当向所述至少一个分布式节点发送的待执行任务为所述阻塞式任务时,等待接收每一分布式节点返回的对应所述阻塞式任务的执行完成信号。
这里,当分布式节点执行完待执行任务时均会返回所述执行完成信号,以告知控制节点完成该待执行任务。
步骤S602,当接收到每一分布式节点返回的所述执行完成信号之后,依次将所述待执行任务序列中所述阻塞式任务之后的待执行任务分发给所述至少一个分布式节点。
这里,当接收到每一分布式节点返回的执行完成信号时,表明控制节点所广播的阻塞式任务已被全部分布式节点执行完成,因此,可以发送下一个待执行任务,如果下一个待执行任务也是阻塞式任务的话,则需要等分布式节点返回对应下一个待执行任务的执行完成信号之后,才可以发送再下一个待执行任务;如果下一个待执行任务不是阻塞式任务,则无需等分布式节点返回对应下一个待执行任务的执行完成信号,只要再下一个待执行任务的任务开始时刻到达即可发送给待执行任务。
步骤S603,当在经过预设时长之后未接收到任一分布式节点返回的对应所述阻塞式任务的执行完成信号时,向所述至少一个分布式节点再次发送所述阻塞式任务。
这里,为了避免阻塞式任务未被有效执行,在经过预设时长之后,如果扔未接收到执行完成信号,表明可能分布式节点未正常接收到该阻塞式任务,或者分布式节点未正常执行该阻塞式任务,因此,重新向分布式节点发送该阻塞式任务,以保证该阻塞式任务能够被有效执行。
本申请实施例提供的任务调度方法,对于阻塞式任务,只有当该阻塞式任务执行完成之后,才可以发送并执行后续的待执行任务,在没有完成该阻塞式任务的情况下,该阻塞式任务后续的所有任务都不能被执行,如此,能够保证关键任务准确且有效的被执行完成,避免关键任务被遗漏或未正常执行。
在一些实施例中,所述待执行任务包括非阻塞式任务;所述非阻塞式任务是指该非阻塞式任务后续的所有任务的执行,都不依赖该非阻塞式任务的状态。参见图6B,图6B是本申请实施例提供的任务调度方法的一个可选的流程示意图,图6B示出了图3中的步骤S303中按照所述待执行任务序列依次将每一所述待执行任务分发给至少一个分布式节点的步骤,可以通过以下步骤实现:
步骤S611,当向所述至少一个分布式节点发送的待执行任务为所述非阻塞式任务时,在每一所述非阻塞式任务的任务开始时刻,向所述至少一个分布式节点发送所述非阻塞式任务。
本申请实施例中,如果待执行任务是非阻塞式任务,则无需等待当前待执行任务执行完成,即无需等待控制节点接收到执行完成信号,只要下一个待执行任务的任务开始时刻到来,即正常向分布式节点发送下一个待执行任务,以保证非阻塞式任务能够及时被发送给分布式节点。
参见图7,图7是本申请实施例提供的任务调度方法的一个可选的流程示意图,将结合图7示出的步骤进行说明。
步骤S701,当控制节点的状态发生变化时,控制节点确定变化后的状态所对应的待执行任务集合。
步骤S702,根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列。
步骤S703,按照所述待执行任务序列依次将每一所述待执行任务分发给分布式节点,以实现向所述分布式节点对所述待执行任务进行调度。以上步骤S701至步骤S703与上述步骤S301至步骤S303相同,本申请实施例不再赘述。
步骤S704,分布式节点根据所述待执行任务的标识,在预设操作指令库中确定与所述待执行任务对应的至少一个操作指令。
这里,当分布式节点接收到控制节点发送的待执行任务之后,执行所述待执行任务。其中,所述待执行任务对应至少一个操作指令,所述操作指令用于指示分布式节点需要执行的操作动作。在一些实施例中,所述待执行任务的标识和所述待执行任务对应的操作指令也可以存储在所述区块链中。
本申请实施例中,在所述分布式节点中,包括用于接收所述待执行任务的接收器和预设操作指令库(即指令列表),所述预设操作指令库中包括至少一个操作指令。当分布式节点接收到所述待执行任务的标识时,解析所述待执行任务,确定所述待执行任务的标识,根据所述标识在自身的所述预设操作指令库中查找与所述标识对应的操作指令,则查找到的操作指令即为与所述待执行任务对应的操作指令。
步骤S705,分布式节点执行所述待执行任务对应的所述至少一个操作指令。
这里,当查找到所述待执行任务对应的操作指令之后,分布式节点执行所述至少一个操作指令。
步骤S706,在执行完所述待执行任务对应的每一操作指令时,分布式节点向所述控制节点返回对应操作指令的执行完成信号。
这里,在每执行完成一个操作指令之后,向控制节点返回该操作指令的执行完成信号。举例来说,当分布式节点查找出当前接收到的任务E对应的操作指令是E1和E2时,则分布式节点首先执行操作指令E1,在执行完操作指令E1之后,向控制节点返回E1执行完成信号;再执行操作指令E2,在执行完操作指令E2之后,向控制节点返回E2执行完成信号。
需要说明的是,由于控制节点可以是将待执行任务广播给多个分布式节点,因此,每一分布式节点在接收到待执行任务之后,均执行步骤S704至步骤S706。
在一些实施例中,所述待执行任务包括阻塞式任务;对应地,所述方法还包括:
步骤S710,当所述分布式节点接收到的所述待执行任务为所述阻塞式任务时,执行所述阻塞式任务,并向所述控制节点返回执行完成信号。
这里,当分布式节点执行完待执行任务时均会返回所述执行完成信号,以告知控制节点完成该待执行任务。
步骤S711,在返回所述执行完成信号之后,接收所述控制节点发送的所述待执行任务序列中所述阻塞式任务之后的待执行任务。
这里,由于所述待执行任务为阻塞式任务,因此,只有当执行完阻塞式任务之后,控制节点才会向分布式节点继续发送下一个待执行任务,因此,当分布式节点返回阻塞式任务的执行完成信号时,才能够接收到控制节点发送的所述待执行任务序列中所述阻塞式任务之后的待执行任务。
在一些实施例中,所述待执行任务包括非阻塞式任务;对应地,所述方法还包括:
步骤S712,当所述分布式节点接收到的所述待执行任务为所述非阻塞式任务时,在每一所述非阻塞式任务的任务开始时刻,接收所述非阻塞式任务并执行。
本申请实施例中,当所述待执行任务是非阻塞式任务时,则无需等待当前待执行任务执行完成,即无需等待分布式节点发出执行完成信号,只要下一个待执行任务的任务开始时刻到来,分布式节点即正常接收控制节点发送的下一个待执行任务,以保证能够及时接收到非阻塞式任务。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例描述的任务调度方法,将所有状态要执行的任务串行化,按照时间先后顺序,进行任务调度,并且将每个任务设置成阻塞式任务或者非阻塞式任务。每一个任务的执行均依赖时间,同时检测上一步的阻塞式任务是否已经完成。若阻塞式任务没有完成,会以设定的间隔重复调度上一步阻塞式任务,直到上一步阻塞式任务完成,或者,只有当上一步阻塞式任务超时的话,才放开阻塞式任务。
本申请实施例的任务调度方法的特点是状态稳定可靠,具备任务执行的容错性,并且,时间上有序。对于任务的增加与删除,均仅需维护当前任务的上下文,无需维护全部任务之间的上下文关系。
本申请实施例中,采用分布式的调度方式,以触发器、接收器作为中间件,任务由全局的控制节点调用触发器,通过网络传输给分布式节点的接收器,接收器收到任务指令,执行各自的任务。
本申请实施例的任务调度方法,基于时间固定的设计需求,可以至少用在以下几种互联网的场景:
第一种:网络游戏副本的动态创建。当今网络游戏的服务器大部分是分布式的部署方案,在副本活动过程中,会牵涉到一系列状态变化的需求,本申请实施例的方法可以实现以下流程:角色的数据迁移与回滚;角色传输控制协议(Transmission ControlProtocol,TCP)连接迁移与回滚;分布式服务状态切换;副本服务器个数的动态计算与创建。
第二种:大型互联网营销活动的动态创建。对于线上接力活动,例如火炬传递,营销活动根据用户行为产生火种,在特定的时间内进行传递,到达特定的时间节点产生营销奖励,这类接力活动可以由本申请实施例的方法实现。
第三种:分布式计算。在互联网的部分场景中,会遇到大量计算的需求,分布式计算,相比于单核计算,或者单服务器计算,需要耗费更多的计算元件,例如,中央处理器(Central Processing Unit,CPU)、服务器等计算元件,采用本申请实施例的方案,好处是可以节省很多的时间开销,例如,大存储数据库表的迁移、大数据用户数据分析时的时间开销。
图8A是本申请实施例提供的触发器与接收器的一种可选的交互示意图,如图8A所示,触发器81与接收器82是一对联合工作组件,触发器81发送包含待执行任务的任务信号811给接收器82,接收器82收到信号后,反向发送一个确认信号821给触发器81,表示任务信号811已接收到。
图8B是本申请实施例提供的触发器与接收器的一种可选的交互示意图,如图8B所示,任务与指令,是触发器81工作服务的对象,某项任务执行时,触发器所在的一个服务进程向触发器81发送指定的信号,触发器81用广播的方式通知所有接收器82,执行该任务对应的指令,如图8B中的广播信号813。其中,该任务可以是位于任务列表812中的任一任务,如图8B所示,任务列表812中包括任务1、任务2……任务N。
接收器82收到该指令后,在操作指令列表822(对应上述预设操作指令库)中,找到该任务对应的指令后并执行,如图8B所示,操作指令列表822中包括指令1、指令2……指令N。在执行完成后,由接收器82向触发器81反向发送一个确认完成信号823,表示该任务已经完成。
图9是本申请实施例提供的控制节点的结构示意图,如图9所示,控制节点90包括前述的触发器81和任务列表812。
控制节点90是任务调度的中央节点,主要的工作原理包括以下几方面:
第一方面:维护任务列表。
这里,主要维护的内容有:任务ID、任务名字、任务开始时间、任务结束时间、任务执行时间、是否是阻塞式任务和任务的重复执行间隔。
这里,任务开始时间,是指当前时间到达任务开始时间时,通过触发器执行该任务;任务结束时间,是指当前时间超过任务结束时间时,标记该任务完成,不再触发执行该任务;任务执行时间,是指接收器反向发送任务执行完成的时候记录任务执行时间,表示任务完成。
是否是阻塞式任务,其中,阻塞式任务必须被执行,未执行的阻塞式任务,在可执行时间段内,会按照执行间隔重复执行,直到任务执行完成或者超过结束时间。并且,在该可执行时间段内,后续的所有任务都不会执行。非阻塞式任务是在可执行时间段内按照执行间隔重复执行,不记录执行时间,并且后续的任务可以执行。
第二方面:按照时间顺序调度任务。控制节点的任务调度,是以固定的时钟周期(例如5秒)遍历一次任务列表,从列表的第一个任务节点开始,每个任务节点,进行如图10的逻辑处理。
如图10所示,对于每个任务节点,执行以下逻辑处理步骤:
步骤S1001,遍历任务列表中当前任务至任务列表结束位置的任务。
步骤S1002,判断当前任务是否是阻塞式任务。如果判断结果为是,则执行步骤S1003;如果判断结果为否,则执行步骤S1007。
步骤S1003,判断当前任务是否已经被执行完成。如果判断结果为是,则返回执行步骤S1001;如果判断结果为否,则执行步骤S1004。
步骤S1004,判断当前时刻是否在所述当前任务的可触发时间段内。
如果判断结果为是,则执行步骤S1005;如果判断结果为否,则遍历结束。
步骤S1005,触发该当前任务。
步骤S1006,判断所触发的任务是否是阻塞式任务。如果判断结果为是,则遍历结束;如果判断结果为否,则返回执行步骤S1001。
步骤S1007,判断当前时刻是否在所述当前任务的可触发时间段内。如果判断结果为是,则执行步骤S1008;如果判断结果为否,则返回执行步骤S1001。
步骤S1008,判断是否超过触发间隔。如果判断结果为是,则执行步骤S1005;如果判断结果为否,则返回执行步骤S1001。
第三方面:阻塞式任务与反复尝试。
对于阻塞式任务,在触发一次后,触发器如果没有收到接收器的反向确认完成信号,在下一个触发时间到达时,会触发第二次,依次类推,直到收到反向确认完成信号表示该任务已完成为止。
本申请实施例中,分布式节点是任务的实际执行者,包括了一个接收器和操作指令列表,其中,操作指令列表以任务信号的信号ID作为索引。
分布式节点的工作原理包括:通过接收器获取所述信号ID;根据信号ID执行对应的操作指令;在执行完成后,调用接收器反向通知指令执行完成。
本申请实施例中,分布式节点支持角色扩展和平行扩展。
其中,角色扩展的原理是:每个角色(即分布式节点)对于同一个任务信号,可以执行不同的指令,如图11所示,当同一个任务信号S1从控制节点90触发时,任务信号S1会以广播方式发送给每个不同角色的分布式节点(例如,分布式节点A、B、C,其中,分布式节点A、B、C对应的接收器82分别为接收器82A、82B、82C),接收器82A、82B、82C同时收到任务信号S1,根据任务信号S1找到对应的操作指令执行,完成后,接收器反向发送消息给控制节点的触发器81。例如,控制节点广播一条消息“升旗仪式开始”,分布式节点A是全体一年级小学生,对应的操作是“佩戴绿领巾”。分布式节点B是全体三年级以上的小学生,对应的操作是“佩戴红领巾”。分布式节点C是全体中学生,对应的操作是“站立”。
以上例举了一个按角色扩展的运用,下面的例子将会描述平行扩展的运用,分布式节点C细分成“向明中学”、“复旦附中”、“建平中学”等,每个中学的中学生,收到指令后,同时执行“唱国歌”的操作。请继续参照图11,分布式节点B和C可以是分布式节点A的两个角色扩展节点。分布式节点A代表了前文例举的一年级小学生,B代表三年级以上的小学生,C代表了全体中学生。
图12是简化了分布式节点内部构造的图示,描述了平行扩展节点的逻辑结构。其中,分布式节点A2、A3是A1的平行扩展节点;分布式节点B2、B3是B1的平行扩展节点;分布式节点C2、C3是C1的平行扩展节点。例如,C1代表了向明中学的中学生,C2代表了复旦附中的中学生,C3代表了建平中学的中学生。
本申请实施例中,任务调度方法的流程设计包括以下几方面内容:设置一个任务列表;时间有序的任务调度方法;区分阻塞式任务和非阻塞式任务;重复触发。
在设置任务列表时,任务列表按照时间顺序进行编写,开始时间必须按照时间升序排列,对于非阻塞式任务可以填写重复间隔。这里,以升旗仪式为例,对所述任务列表进行举例说明,参见表2的任务列表。
表2任务列表
任务ID |
名字 |
开始时间 |
结束时间 |
是否阻塞 |
重复间隔 |
1 |
学生进入操场 |
1点 |
2点 |
否 |
5分钟 |
2 |
升旗仪式准备 |
2点 |
3点 |
否 |
5分钟 |
3 |
升旗仪式 |
3点 |
4点 |
是 |
无 |
4 |
早操 |
3点 |
4点 |
是 |
无 |
5 |
升旗仪式结束 |
3点 |
4点 |
是 |
5分钟 |
在其他实施例中,在设置指令列表时,指令列表维护任务ID对应的指令操作,如下表3所示的指令列表,在收到任务信号时,可以根据任务ID执行对应的操作指令。
表3指令列表
本申请实施例中,所述时间有序的任务调度方法,即按照时间的先后顺序,执行任务,如表2所示,如果当前时间到达任务执行的开始时间时,开始触发该任务的信号;对于当前时间未到达的任务,则不执行该任务。如果多个任务的时间段配置有重合,就需要根据任务的阻塞状态来判断是否能够执行。
其中,阻塞是指定任务设置成阻塞模式后,在没有完成该任务的情况下,后续的所有任务都不能执行,例如,表2中的升旗仪式和早操设置成了阻塞模式,表示这两个任务是关键任务,不能跳过,如果完不成该任务,下面所有的任务都无法执行。非阻塞是指定任务设置成非阻塞模式后,后续的所有任务的执行都不依赖该任务的状态。例如,表2中的“升旗仪式”任务的执行,不依赖于“学生进入操场”、“升旗仪式准备”的完成状态。
重复触发的任务,分两种情况工作:
情况一:在任务设置为“非阻塞模式”的情况下,例如表2中的“学生进入操场”的任务,可以每5分钟重复触发一次,这样能够确保所有学生都能在1个小时的时间段内逐步进入操场,直到当前时间达到结束时间。
情况二:在任务设置为“阻塞模式”的情况下,例如表2中的“唱国歌”任务,一旦触发,就需要10分钟时间完成,那么,控制节点在触发任务时,并不会立即收到接收器的反向信号,所以会以5分钟的间隔重复触发任务信号,直到指令完成后停止触发,表示任务完成,并进入“早操”阶段。
下面,将说明本申请实施例在另一个实际的应用场景中的示例性应用,本申请实施例的方法还可以应用于动态创建游戏副本,由于游戏副本主要的核心是有一个场景的概念,例如,角色可以从一个正常玩的正常场景,到一个更小的游戏副本场景,那么就可以让少部分人聚集到这个副本场景中。其中,游戏副本场景与正常场景是隔离的,因此称之为副本。
副本在服务器(对应上述控制节点)的架构上属于资源的扩展,是服务器资源的扩展,例如,可以是进程的扩展,或者也可以是内存的扩展。副本主要的核心是与现有的资源是隔离的,这种副本是需要能创建的出来,另外是要跨进程(即多个分布式节点)的调度。
另外,在创建游戏副本时,还需要考虑副本的生命周期,副本是在需要的时候创建,副本用完之后就会被回收。例如,创建一个游戏副本,就需要一***立于目前使用的服务器之外的新的服务器(即分布式节点),在新的服务器上部署新的游戏进程,并开启一定的共享内存,当角色进入到游戏副本对应的场景之后即可实现该场景下的游戏操作,当游戏结束时角色再回到正常场景,则此时这个游戏副本的进程就会被刷掉,或者被共享内存回收掉。
需要说明的是,副本的状态是互斥的,每个副本之间的状态是不一致的。因此,采用本申请实施例的方法在动态创建游戏副本时,当从当前副本切换到新的副本对应的游戏场景中时,此时副本对应的状态发生变化,因此,确定新的副本对应的多个待执行的游戏任务(对应上述待执行任务),例如,待执行的游戏任务可以包括:游戏副本中的选择道具任务、选择装备任务、执行特定任务和进行攻击等任务。然后确定每一游戏任务的开始时刻,根据每一游戏任务的开始时刻对全部待执行的游戏任务进行排序,得到游戏任务序列(对应上述待执行任务序列);最后按照该游戏任务序列依次将游戏任务分发给分布式节点,其中,所述分布式节点可以是正在运行该游戏副本的终端,即所述分布式节点可以是正在玩游戏的用户所使用的终端,通过将游戏任务发送给玩游戏的用户,使得用户通过终端执行所述游戏任务,完成对所述游戏任务序列中的游戏任务进行调度。对于游戏中的多个副本,循环采用上述任务调度方法进行任务调度,从而可以实现调度游戏进程的多个副本,实现多个任务机制。
本申请实施例提供的任务调度方法,对于分布式***中各个节点状态有序且可靠的检查机制,可以明确指定完成特定任务的时间点,结合阻塞式的设定,容错性极强,可以保证任务调度的上下文逻辑。并且在任务列表中,删除和新增任务,仅需检查当前任务的前置任务与后继任务,确定时间上是否按照升序排列,从而能够有效降低检查的工作量,提高任务调度的效率。
下面继续说明本申请实施例提供的任务调度装置254的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器250的任务调度装置254中的软件模块可以包括:
确定模块2541,用于当控制节点的状态发生变化时,确定变化后的状态所对应的待执行任务集合;
排序模块2542,用于根据所述待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序,得到待执行任务序列;
分发模块2543,用于按照所述待执行任务序列依次将每一所述待执行任务分发给至少一个分布式节点,以实现向每一所述分布式节点对所述待执行任务进行调度。
在一些实施例中,所述确定模块还用于:当所述控制节点增加新的状态时,所述控制节点确定所述新的状态对应的待执行任务;通过所述新的状态对应的待执行任务和增加所述新的状态之前的历史待执行任务,形成所述待执行任务集合。
在一些实施例中,所述确定模块还用于:当所述控制节点删除状态时,所述控制节点确定删除所述状态之后所剩余的状态对应的剩余待执行任务;通过所述剩余待执行任务形成所述待执行任务集合。
在一些实施例中,所述分发模块还用于:确定所述待执行任务序列中的每一所述待执行任务的触发时间段,其中,所述触发时间段的起始时刻为所述待执行任务的任务开始时刻,所述触发时间段的终止时刻为所述待执行任务的任务结束时刻;将所述触发时间段包含当前时刻的待执行任务确定为目标待执行任务;将所述目标待执行任务和所述待执行任务序列中位于所述目标待执行任务之后的其他待执行任务,依次分发给至少一个分布式节点。
在一些实施例中,所述分发模块还用于:将所述触发时间段包含当前时刻,且未被任一所述分布式节点所执行的待执行任务,确定为所述目标待执行任务。
在一些实施例中,所述装置还包括:添加模块,用于当接收到任一所述分布式节点返回的对应一个待执行任务的执行完成信号时,为所述待执行任务添加执行完成标识;禁止模块,用于禁止向所述分布式节点发送具有执行完成标识的任务。
在一些实施例中,所述待执行任务包括阻塞式任务;对应地,所述分发模块还用于:当向所述至少一个分布式节点发送的待执行任务为所述阻塞式任务时,等待接收每一分布式节点返回的对应所述阻塞式任务的执行完成信号;当接收到每一分布式节点返回的所述执行完成信号之后,依次将所述待执行任务序列中所述阻塞式任务之后的待执行任务分发给所述至少一个分布式节点。
在一些实施例中,所述装置还包括:发送模块,用于当在经过预设时长之后未接收到任一分布式节点返回的对应所述阻塞式任务的执行完成信号时,向所述至少一个分布式节点再次发送所述阻塞式任务。
在一些实施例中,所述待执行任务包括非阻塞式任务;对应地,所述分发模块还用于:当向所述至少一个分布式节点发送的待执行任务为所述非阻塞式任务时,在每一所述非阻塞式任务的任务开始时刻,向所述至少一个分布式节点发送所述非阻塞式任务。
在其他实施例中,任务调度装置也可以是包括图1中的分布式节点的终端100-2中的任务调度装置,其也可以是程序和插件等形式的软件,包括以下软件模块:
接收模块,用于接收控制节点按照待执行任务序列依次发送的待执行任务,其中,所述待执行任务序列是当控制节点的状态发生变化时,控制节点根据变化后的状态所对应的待执行任务集合中每一待执行任务的任务开始时刻,对所述待执行任务进行排序得到的;执行模块,用于执行所述待执行任务。
在一些实施例中,所述装置还包括:操作指令确定模块,用于根据所述待执行任务的标识,在预设操作指令库中确定与所述待执行任务对应的至少一个操作指令;对应地,所述执行模块还用于:执行所述待执行任务对应的所述至少一个操作指令。
在一些实施例中,所述装置还包括:执行完成信号返回模块,用于在执行完所述待执行任务对应的每一操作指令时,向所述控制节点返回对应操作指令的执行完成信号。
在一些实施例中,所述待执行任务包括阻塞式任务;对应地,所述装置还包括:第一处理模块,用于当所述分布式节点接收到的所述待执行任务为所述阻塞式任务时,执行所述阻塞式任务,并向所述控制节点返回执行完成信号;在返回所述执行完成信号之后,接收所述控制节点发送的所述待执行任务序列中所述阻塞式任务之后的待执行任务。
在一些实施例中,所述待执行任务包括非阻塞式任务;对应地,所述装置还包括:第二处理模块,用于当所述分布式节点接收到的所述待执行任务为所述非阻塞式任务时,在每一所述非阻塞式任务的任务开始时刻,接收所述非阻塞式任务并执行。
需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,例如,如图3示出的方法。
在一些实施例中,存储介质可以是铁电存储器(Ferromagnetic Random Ac cessMemory,FRAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(ProgrammableRead Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read OnlyMemory,EPROM)、带电可擦可编程只读存储器(Electrically Erasable ProgrammableRead Only Memory,EEP ROM)、闪存、磁表面存储器、光盘、或光盘只读存储器(CompactDisk-ReadOnly Memory,CD-ROM)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件***中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(Hyper Text MarkupLanguage,HTML)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。