【技术实现步骤摘要】
一种生成线性任务队列方法及装置
本申请涉及计算机领域,尤其涉及一种生成线性任务队列方法及装置。
技术介绍
任务指的是计算机中相对独立的操作。任务之间通常有相互关系,例如依赖关系,可以用符号“~”表示依赖关系。A~B表示任务A依赖于任务B,即当且仅当B成功执行后,A才能成功执行,A~B就是任务A依赖于任务B的表达式。A~(BandC)表示任务A依赖于任务B和C,即当且仅当B、C都成功执行后,A才能成功执行。A~(BorC)表示任务A依赖于任务B或C,即当且仅当B、C其中至少有一个成功执行后,A才能成功执行。“~”后的表达式可以是由逻辑运算符and或or以及左右括号组合成任意逻辑的运算表达式。“~”符号具有传递性,即若A~B且B~C,则A~C,并且可以写作A~B~C。但是这种由逻辑运算符and或or以及左右括号组合成任意逻辑的运算表达式是非常复杂的,对于计算机而言,难以辨别任务的执行顺序。因此,需要将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列,即“~”后不包含逻辑运算符and或or以及左右括号的依赖关系。
技术实现思路
为了解决现有技术中将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列的问题,本申请提供了一种生成线性任务队列方法,能够将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列。本申请实施例提供一种生成线性任务队列方法,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包 ...
【技术保护点】
1.一种生成线性任务队列方法,其特征在于,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包括:/n将任务表达式中的逻辑运算符替换为依赖符号;/n将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;/n在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;/n遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。/n
【技术特征摘要】
1.一种生成线性任务队列方法,其特征在于,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包括:
将任务表达式中的逻辑运算符替换为依赖符号;
将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。
2.根据权利要求1所述的方法,其特征在于,在将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述方法还包括:
对所述多个单元表达式按照固定的顺序进行编号;
所述在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点。
3.根据权利要求2所述的方法,其特征在于,所述节点数据结构每个节点还包括节点标识;
所述方法还包括:
按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
4.根据权利要求3所述的方法,其特征在于,预先建立计数器,所述方法还包括:
将计数器初始值设置为0;
对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
5.根据权利要求2所述的方法,其特征在于,所述对所述多个单元表达式按照固定的顺序进行编号包括:
对所述多个单元表达式按照字母表的顺序进行编号。
6.一种生成线性任务队列装置,其特征在于,所述装置包括:
预先建立单元,用于预先建立节点数据结构,所述节点数...
【专利技术属性】
技术研发人员:魏立勃,
申请(专利权)人:中国农业银行股份有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。