CN112612597B - 一种生成线性任务队列方法及装置 - Google Patents
一种生成线性任务队列方法及装置 Download PDFInfo
- Publication number
- CN112612597B CN112612597B CN202011621481.XA CN202011621481A CN112612597B CN 112612597 B CN112612597 B CN 112612597B CN 202011621481 A CN202011621481 A CN 202011621481A CN 112612597 B CN112612597 B CN 112612597B
- Authority
- CN
- China
- Prior art keywords
- node
- task
- unit
- expression
- data structure
- 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 35
- 230000014509 gene expression Effects 0.000 claims abstract description 282
- 230000001419 dependent effect Effects 0.000 claims abstract description 51
- 239000002243 precursor Substances 0.000 claims description 31
- 238000010276 construction Methods 0.000 claims description 10
- 238000012163 sequencing technique Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 3
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 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
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种生成线性任务队列方法及装置,预先建立节点数据结构,方法包括:将任务表达式中的逻辑运算符替换为依赖符号;将任务表达式拆分为多个只包含一个依赖符号的单元表达式;将所述每个单元表达式的父任务和子任务填入所述节点数据结构的多个节点中,得到节点数据结构关系;将所述节点数据结构关系中的任务添加到线性任务队列。由此可见,本申请实施例的方法能够将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列,确定了任务的执行顺序,方便计算机进行任务的处理。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种生成线性任务队列方法及装置。
背景技术
任务指的是计算机中相对独立的操作。任务之间通常有相互关系,例如依赖关系,可以用符号“~”表示依赖关系。A~B表示任务A依赖于任务B,即当且仅当B成功执行后,A才能成功执行,A~B就是任务A依赖于任务B的表达式。A~(B and C)表示任务A依赖于任务B和C,即当且仅当B、C都成功执行后,A才能成功执行。A~(B or C)表示任务A依赖于任务B或C,即当且仅当B、C其中至少有一个成功执行后,A才能成功执行。“~”后的表达式可以是由逻辑运算符and或or以及左右括号组合成任意逻辑的运算表达式。“~”符号具有传递性,即若A~B且B~C,则A~C,并且可以写作A~B~C。但是这种由逻辑运算符and或or以及左右括号组合成任意逻辑的运算表达式是非常复杂的,对于计算机而言,难以辨别任务的执行顺序。因此,需要将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列,即“~”后不包含逻辑运算符and或or以及左右括号的依赖关系。
发明内容
为了解决现有技术中将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列的问题,本申请提供了一种生成线性任务队列方法,能够将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列。
本申请实施例提供一种生成线性任务队列方法,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包括:
将任务表达式中的逻辑运算符替换为依赖符号;
将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,在将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述方法还包括:
对所述多个单元表达式按照固定的顺序进行编号;
所述在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点。
可选的,所述节点数据结构每个节点还包括节点标识;
所述方法还包括:
按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
可选的,预先建立计数器,所述方法还包括:
将计数器初始值设置为0;
对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,所述对所述多个单元表达式按照固定的顺序进行编号包括:
对所述多个单元表达式按照字母表的顺序进行编号。
本申请实施例还提供了一种生成线性任务队列装置,所述装置包括:
预先建立单元,用于预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表
替换单元,用于将任务表达式中的逻辑运算符替换为依赖符号;
拆分单元,用于将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
构建单元,用于在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
添加单元,用于遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,在所述拆分单元将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述装置还包括:
编号单元,用于对所述多个单元表达式按照固定的顺序进行编号;
所述构建单元在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
所述构建单元在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点。
可选的,所述节点数据结构每个节点还包括节点标识;
所述装置还包括:
第一构建子单元,用于按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
可选的,所述装置还包括:
建立计数器单元,用于预先建立计数器,将计数器初始值设置为0;
添加子单元,用于对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,所述编号单元对所述多个单元表达式按照固定的顺序进行编号包括:
所述编号单元对所述多个单元表达式按照字母表的顺序进行编号。
与现有技术相比,本申请至少具有以下优点:
本申请实施例提供了一种生成线性任务队列方法,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包括:将任务表达式中的逻辑运算符替换为依赖符号;将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。由此可见,本申请实施例通过将逻辑运算符替换为依赖符号,将任务表达式拆分为多个只包含一个依赖符号的单元表达式,将单元表达式中的不同任务加入到节点数据结构,得到节点数据结构关系,将节点数据结构中的任务添加到一维线性任务队列。本申请实施例的方法能够将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列,确定了任务的执行顺序,方便计算机进行任务的处理。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请提供的一种生成线性任务队列方法实施例的流程图;
图2为本申请提供的一种节点数据结构的节点示意图;
图3为本申请提供的一种生成线性任务队列装置实施例的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1,该图为本申请实施例提供的一种生成线性任务队列方法的流程图。
本申请的实施例首先预先建立节点数据结构,节点数据结构包括多个节点(Node),每个节点包括节点标识(String)和节点列表(List<Node>)。节点列表包括前驱节点列表和后继节点列表。具体的,节点数据结构可以是双向链表。
本实施例提供的生成线性任务队列方法包括如下步骤:
步骤S101:将任务表达式中的逻辑运算符替换为依赖符号。
在本申请的实施例中,将任务表达式中的逻辑运算符统一替换为依赖符号,即任务表达式中的逻辑运算符and或or统一替换为“~”符号。
作为一种示例,可以将任务表达式A~(B and C)中的and替换为~,替换后的表达式为A~(B~C)。
步骤S102:将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务。
在本申请的实施例中,在将任务表达式中的逻辑运算符and或or统一替换为“~”符号之后,可以将任务表达式拆分为多个只包含一个依赖符号的单元表达式,即去掉任务表达式中的左右括号。其中,单元表达式包括依赖符号和依赖符号连接的不同的任务,依赖符号前的任务是父任务,依赖符号后的任务是子任务。具体的,假设全部的任务表达式中有N个~符号,则可以拆分为N个单元表达式。
作为一种示例,将任务表达式A~(B and C)替换为A~(B~C)之后,可以拆分为两个单元表达式:A~B和A~C。单元表达式A~B中,任务A为父任务,任务B为子任务,任务A依赖任务B,即先完成任务B,再完成任务A,也就是先完成子任务,再完成父任务。
需要说明的是,为了避免发生单元表达式的重复或遗漏的情况,可以对多个单元表达式按照固定的顺序进行编号。具体的,对多个单元表达式按照字母表的顺序进行编号。若出现按照固定的顺序进行编号发生并列的情况,针对并列的情况采用其他的编号规则进行排序,直到没有并列排序。
步骤S103:在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系。
在本申请的实施例中,虽然已经预先构建了节点数据结构,但是只是节点数据结构的框架,具体的节点和节点中的列表,都需要进行一一构建。因此,针对任意一个单元表达式,将该单元表达式的父任务构建为父节点,将该单元表达式的子任务构建为子节点。将该单元表达式的子任务填入父节点的后继节点列表,将该单元表达式的父任务填入子节点的前驱节点列表。将多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系。
需要说明的是,可以按照多个单元表达式的编号,依次为多个单元表达式中每个单元表达式构建父节点和子节点。
值得注意的是,将每个单元表达式的任务都建立父节点和子节点,可能会出现重复的情况,因此可以按照多个单元表达式的编号,确定第一单元表达式,即确定编号为首位或第1位的单元表达式。将第一单元表达式的父任务构建为一个父节点,父节点的节点标识为第一单元表达式的父任务的名称,将第一单元表达式的子任务构建为一个子节点,子节点的节点标识为子任务的名称,将第一单元表达式的子任务填入父节点的后继节点列表,将第一单元表达式的父任务填入子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式。
按照多个单元表达式的编号,确定已填入单元表达式的下一号单元表达式为第二单元表达式,即确定第1位的单元表达式的下一位为第2位的单元表达式。检测第二单元表达式的子任务名称对应的节点标识是否在节点数据结构中,若存在,则将第二单元表达式的父任务填入子节点的前驱节点列表,若不存在,则将第二单元表达式的子任务构建为一个子节点,子节点的节点标识为所述子任务的名称,并将第二单元表达式的父任务填入子节点的前驱节点列表,继续检测第二单元表达式的父任务名称对应的节点标识是否在节点数据结构中,若存在,则将第二单元表达式的子任务填入父节点的后继节点列表中,若不存在,则将第二单元表达式的父任务构建为一个父节点,父节点的节点标识为父任务的名称,并将第二单元表达式的子任务填入父节点的前驱节点列表,将第二单元表达式作为已填入单元表达式。
按照多个单元表达式的编号,确定已填入单元表达式的下一号单元表达式,重复上述先检测任务名称的节点是否已经存在节点数据结构,再将任务填入节点列表的步骤,直到将多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到节点数据结构关系。
步骤S104:遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。
在本申请的实施例中,首先遍历节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,即后继节点列表为空,代表该节点的任务没有依赖的任务,可以填入线性任务队列。之后将后继节点列表为空的节点从节点数据关系中删除,并将该任务在节点数据结构的后继节点列表中删除。继续重复遍历节点数据结构关系,直至将节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。具体的,某个节点的节点标识为某个任务的名称,后继节点列表为空,可以直接将该任务填入线性任务队列,将该节点从节点数据关系中删除,并确定该节点中的前驱节点列表中的任务,寻找这些任务名称对应的节点,在这些任务名称对应的节点的后继节点列表中删除该任务。
值得注意的是,将后继节点列表为空的节点删除和将任务在节点数据结构的后继节点列表中删除没有必然的前后顺序,也可以是同时进行的。
作为一种示例,任务A依赖任务B,任务B依赖任务C。如图2所示,在节点数据结构关系中有3个节点,节点名称分别为A、B和C。节点A中无前驱节点列表,后继节点列表中有B。节点B前驱节点列表中有A,后继节点列表中有C。节点C前驱节点列表中有B,无后继节点列表。节点C无后继节点列表,将任务C加入线性任务队列,在节点数据结构中删除节点C,并且确定节点C前驱节点列表中为任务B,确定任务B对应的节点B,将节点B后继节点列表中的任务C删除。
值得注意的是,为了便于对加入线性任务队列的任务排定执行顺序,可以预先建立计数器,将计数器初始值设置为0。具体的,计数器可以是int类型计数器。
对节点数据关系根据节点标识进行排序,得到排序结果,按照排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,任务在线性任务队列中的执行编号为计数器初始值,计数器初始值加1得到计数器第一值,将计数器第一值重新设置为计数器初始值,并将后继节点列表为空的节点删除,将任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到具有任务顺序的线性任务队列。具体的,可以对节点数据关系根据节点标识进行排序,排序的顺序可以是字母表的顺序,得到排序结果。进行排序的目的是为了在遍历节点数据结构关系的时候可以做到不遗漏或不重复读取节点。
作为一种示例,计数器可以是int类型计数器,初始值t=0。遍历节点数据结构关系,确定节点的后继结点列表是否为空,若为空则将该节点添加到线性任务队列,该节点在线性任务队列中的序号为t,同时将t=t+1,然后将该节点中的全部前驱节点的后继结点列表中的该节点删除,然后再将该节点从节点数据结构关系中删除。继续重新遍历节点数据结构关系,直至将节点数据结构关系中的任务全部加入线性任务队列。
值得注意的是,在遍历节点数据结构关系之后,发现没有后继结点列表为空的节点,若此时节点数据结构关系不为空,由于出现了循环依赖关系的任务,例如A~B~C~A,则返回生成线性任务队列结束。若节点数据结构关系为空,则得到完成后的线性任务队列。线性任务队列中的节点排序即为最终线性任务队列的顺序。
由此可见,本申请实施例通过将逻辑运算符替换为依赖符号,将任务表达式拆分为多个只包含一个依赖符号的单元表达式,将单元表达式中的不同任务加入到节点数据结构,得到节点数据结构关系,将节点数据结构中的任务添加到一维线性任务队列。本申请实施例的方法能够将具有复杂依赖关系的多个任务解析为呈一维队列状的线性依赖关系的任务队列,确定了任务的执行顺序,方便计算机进行任务的处理。
基于以上实施例提供的一种生成线性任务队列方法,本申请实施例还提供了一种生成线性任务队列装置,下面结合附图来详细说明其工作原理。
参见图3,该图为本申请实施例提供的一种生成线性任务队列装置的结构框图。
本实施例提供的生成线性任务队列装置300包括:
预先建立单元310,用于预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表
替换单元320,用于将任务表达式中的逻辑运算符替换为依赖符号;
拆分单元330,用于将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
构建单元340,用于在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
添加单元350,用于遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,在所述拆分单元330将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述装置还包括:
编号单元,用于对所述多个单元表达式按照固定的顺序进行编号;
所述构建单元340在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
所述构建单元340在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点。
可选的,所述节点数据结构每个节点还包括节点标识;
所述装置300还包括:
第一构建子单元,用于按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
可选的,所述装置300还包括:
建立计数器单元,用于预先建立计数器,将计数器初始值设置为0;
添加子单元,用于对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
可选的,所述编号单元对所述多个单元表达式按照固定的顺序进行编号包括:
所述编号单元对所述多个单元表达式按照字母表的顺序进行编号。
当介绍本申请的各种实施例的元件时,冠词“一”、“一个”、“这个”和“所述”都意图表示有一个或多个元件。词语“包括”、“包含”和“具有”都是包括性的并意味着除了列出的元件之外,还可以有其它元件。
需要说明的是,本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccess Memory,RAM)等。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元及模块可以是或者也可以不是物理上分开的。另外,还可以根据实际的需要选择其中的部分或者全部单元和模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (6)
1.一种生成线性任务队列方法,其特征在于,预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表,所述方法包括:
将任务表达式中的逻辑运算符替换为依赖符号;
将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列;
在将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述方法还包括:
对所述多个单元表达式按照固定的顺序进行编号;
所述在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点;
所述节点数据结构每个节点还包括节点标识;
所述方法还包括:
按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
2.根据权利要求1所述的方法,其特征在于,预先建立计数器,所述方法还包括:
将计数器初始值设置为0;
对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
3.根据权利要求1所述的方法,其特征在于,所述对所述多个单元表达式按照固定的顺序进行编号包括:
对所述多个单元表达式按照字母表的顺序进行编号。
4.一种生成线性任务队列装置,其特征在于,所述装置包括:
预先建立单元,用于预先建立节点数据结构,所述节点数据结构包括多个节点,每个节点包括前驱节点列表和后继节点列表
替换单元,用于将任务表达式中的逻辑运算符替换为依赖符号;
拆分单元,用于将逻辑运算符替换为依赖符号的任务表达式拆分为多个只包含一个依赖符号的单元表达式,所述单元表达式包括所述依赖符号和所述依赖符号连接的不同的任务,所述依赖符号前的任务是父任务,所述依赖符号后的任务是子任务;
构建单元,用于在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点,将同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述多个单元表达式的任务填入节点数据结构后,得到节点数据结构关系;
添加单元,用于遍历所述节点数据结构关系,将后继节点列表为空的节点中的任务添加到具有任务顺序的线性任务队列,将所述后继节点列表为空的节点删除,所述任务在节点数据结构的后继节点列表中删除,继续重复遍历所述节点数据结构关系,直至将所述节点数据结构关系中的多个任务添加到所述具有任务顺序的线性任务队列;
在所述拆分单元将任务表达式拆分为多个只包含一个依赖符号的单元表达式之后,所述装置还包括:
编号单元,用于对所述多个单元表达式按照固定的顺序进行编号;
所述构建单元在所述节点数据结构中,将所述父任务构建为父节点,将所述子任务构建为子节点包括:
所述构建单元在所述节点数据结构中,按照所述多个单元表达式的编号,依次为所述多个单元表达式构建所述父节点和所述子节点;
所述节点数据结构每个节点还包括节点标识;
所述装置还包括:
第一构建子单元,用于按照所述多个单元表达式的编号,确定第一单元表达式,将所述第一单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,将同一个单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,将所述同一单元表达式的子任务填入所述父节点的后继节点列表,将所述同一单元表达式的父任务填入所述子节点的前驱节点列表,将所述第一单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照所述多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式为第二单元表达式,检测所述第二单元表达式的子任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,若不存在,则将所述第二单元表达式的子任务构建为一个子节点,所述子节点的节点标识为所述子任务的名称,并将所述第二单元表达式的父任务填入所述子节点的前驱节点列表,继续检测所述第二单元表达式的父任务名称对应的节点标识是否在所述节点数据结构中,若存在,则将所述第二单元表达式的子任务填入所述父节点的后继节点列表中,若不存在,则将所述第二单元表达式的父任务构建为一个父节点,所述父节点的节点标识为所述父任务的名称,并将所述第二单元表达式的子任务填入所述父节点的前驱节点列表,将所述第二单元表达式作为已填入单元表达式;
所述第一构建子单元,用于按照多个单元表达式的编号,确定所述已填入单元表达式的下一号单元表达式,直到将所述多个单元表达式的任务按照编号依次填入节点数据结构后结束,得到所述节点数据结构关系。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:
建立计数器单元,用于预先建立计数器,将计数器初始值设置为0;
添加子单元,用于对所述节点数据关系根据所述节点标识进行排序,得到排序结果,按照所述排序结果遍历节点,记录后继节点列表为空的节点,确定后继节点列表为空的节点标识,将节点标识对应的任务添加到线性任务队列,所述任务在所述线性任务队列中的执行编号为所述计数器初始值,所述计数器初始值加1得到计数器第一值,将所述计数器第一值重新设置为所述计数器初始值,并将所述后继节点列表为空的节点删除,将所述任务在节点数据结构的后继节点列表中删除,重复本步骤,直至将节点中的多个任务添加到所述具有任务顺序的线性任务队列。
6.根据权利要求4所述的装置,其特征在于,所述编号单元对所述多个单元表达式按照固定的顺序进行编号包括:
所述编号单元对所述多个单元表达式按照字母表的顺序进行编号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011621481.XA CN112612597B (zh) | 2020-12-30 | 2020-12-30 | 一种生成线性任务队列方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011621481.XA CN112612597B (zh) | 2020-12-30 | 2020-12-30 | 一种生成线性任务队列方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612597A CN112612597A (zh) | 2021-04-06 |
CN112612597B true CN112612597B (zh) | 2023-11-03 |
Family
ID=75249506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011621481.XA Active CN112612597B (zh) | 2020-12-30 | 2020-12-30 | 一种生成线性任务队列方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612597B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113923519B (zh) * | 2021-11-11 | 2024-02-13 | 深圳万兴软件有限公司 | 视频渲染方法、装置、计算机设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227736A (zh) * | 2016-07-11 | 2016-12-14 | 乐视控股(北京)有限公司 | 一种基于链表结构的逻辑流程实现方法及装置 |
CN109325150A (zh) * | 2018-08-06 | 2019-02-12 | 北京京东金融科技控股有限公司 | 基于表达式的大数据处理方法、装置、电子设备、存储介质 |
CN109445926A (zh) * | 2018-11-09 | 2019-03-08 | 杭州玳数科技有限公司 | 数据任务调度方法及数据任务调度系统 |
CN110362394A (zh) * | 2019-07-22 | 2019-10-22 | 北京明略软件系统有限公司 | 任务处理方法及装置、存储介质、电子装置 |
CN111400017A (zh) * | 2020-03-26 | 2020-07-10 | 华泰证券股份有限公司 | 一种分布式复杂任务调度方法 |
CN112035235A (zh) * | 2020-09-02 | 2020-12-04 | 中国平安人寿保险股份有限公司 | 任务调度方法、系统、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8954986B2 (en) * | 2010-12-17 | 2015-02-10 | Intel Corporation | Systems and methods for data-parallel processing |
-
2020
- 2020-12-30 CN CN202011621481.XA patent/CN112612597B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227736A (zh) * | 2016-07-11 | 2016-12-14 | 乐视控股(北京)有限公司 | 一种基于链表结构的逻辑流程实现方法及装置 |
CN109325150A (zh) * | 2018-08-06 | 2019-02-12 | 北京京东金融科技控股有限公司 | 基于表达式的大数据处理方法、装置、电子设备、存储介质 |
CN109445926A (zh) * | 2018-11-09 | 2019-03-08 | 杭州玳数科技有限公司 | 数据任务调度方法及数据任务调度系统 |
CN110362394A (zh) * | 2019-07-22 | 2019-10-22 | 北京明略软件系统有限公司 | 任务处理方法及装置、存储介质、电子装置 |
CN111400017A (zh) * | 2020-03-26 | 2020-07-10 | 华泰证券股份有限公司 | 一种分布式复杂任务调度方法 |
CN112035235A (zh) * | 2020-09-02 | 2020-12-04 | 中国平安人寿保险股份有限公司 | 任务调度方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112612597A (zh) | 2021-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8589884B2 (en) | Method and system for identifying regression test cases for a software | |
CN111324577B (zh) | 一种Yml文件读写的方法及装置 | |
CN111027702A (zh) | 一种实现量子线路替换的方法、装置、存储介质和电子装置 | |
CN108170602B (zh) | 一种测试用例生成方法、装置、终端及计算机可读介质 | |
CN108984652A (zh) | 一种可配置数据清洗系统和方法 | |
CN108415912B (zh) | 基于MapReduce模型的数据处理方法和设备 | |
CN111984829A (zh) | 一种基于vue的树异步加载方法、装置、设备和介质 | |
JP2019021232A (ja) | 情報処理装置、情報処理方法および情報処理プログラム | |
CN112612597B (zh) | 一种生成线性任务队列方法及装置 | |
CN116841536B (zh) | 一种组件引用关系重构方法、装置、系统及存储介质 | |
CN108776660B (zh) | 一种基于ArcGIS的批量匹配道路属性的方法 | |
CN111949832A (zh) | 批量作业依赖关系的解析方法及装置 | |
CN115576828A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN111078573A (zh) | 一种测试报文的生成方法及装置 | |
CN111026765A (zh) | 严格平衡二叉树的动态处理方法、设备、存储介质及装置 | |
CN114139923A (zh) | 任务关联性分析方法、装置及计算机可读存储介质 | |
CN100383789C (zh) | 一种对系统资源进行管理的实现方法 | |
CN114895885B (zh) | 在三维检测软件基于特征的重计算方法 | |
CN111399830B (zh) | 一种应用程序容量监控方法、装置、电子设备及存储介质 | |
CN112837026A (zh) | 一种交付物循环依赖的分析方法、装置、设备及存储介质 | |
CN111061640B (zh) | 一种软件可靠性测试用例筛选方法及系统 | |
JP7173343B2 (ja) | 表示制御装置、表示制御方法、および、表示制御プログラム | |
Zheng et al. | Online Maintenance of Disjoint Line Segment Sets Utilizing Treap and Strict partial Ordering Theory | |
CN115936095A (zh) | 一种参数梯度同步方法、装置、设备及存储介质 | |
CN114154249A (zh) | 火箭参数管理方法、装置、终端设备及介质 |
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 |