CN1728165A - 一种用于工作流引擎的多任务协同调度方法 - Google Patents
一种用于工作流引擎的多任务协同调度方法 Download PDFInfo
- Publication number
- CN1728165A CN1728165A CNA2005100428886A CN200510042888A CN1728165A CN 1728165 A CN1728165 A CN 1728165A CN A2005100428886 A CNA2005100428886 A CN A2005100428886A CN 200510042888 A CN200510042888 A CN 200510042888A CN 1728165 A CN1728165 A CN 1728165A
- Authority
- CN
- China
- Prior art keywords
- task
- state
- forwarding
- setstatus
- client
- 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.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种用于工作流引擎的多任务协同调度方法,构建多任务协同方法的计算模型——多步任务协同网,这是一个四元组N=(C,T;W,D)按照充分必要条件构造,多任务调度包括启动案例、终止案例、客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环八个调度方法。在多任务调度之前,案例和所有的工作、任务、转发、循环都被初始化为就绪状态。启动案例是第一个被执行调度,客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环是根据多步任务协同网的流向,包括正向和逆向,终止案例调度是根据工作和转发的状态由系统自动调度。本发明实现多步任务的正向和逆向调度。
Description
技术领域
本发明涉及工作流和业务流程分析与建模技术,特别涉及一种用于工作流引擎的多任务协同调度方法。
现有技术
工作流引擎的主要目标是实现工作流中多任务的调度和执行,而工作流引擎的性能主要取决于多任务的调度方法,因此,工作流引擎中的多任务调度方法日益受到学术界和企业界的重视。Petri网技术是工作流引擎多任务调度中最常用的方法之一,其中,以Van derAalst在Petri网基础上提出的工作流网(WF-net)调度方法最为著名。关于Petri网和工作流网的知识可参考书籍《工作流管理——模型、方法和系统》(Wil van der Aalst & Kees vanHee著,王建民、闻立杰等译,清华大学出版社,2004年2月,ISBN 7-302-08118-2/TP.5866)。
尽管以Petri网为基础的工作流网技术,在工作流引擎多任务调度应用中取得了一定的成果,但它还存在以下问题:
1、工作流网以三元组(P,T;F)构成的Petri网为基础,用库所(P)表示条件,用变迁(T)表示任务,用流关系(F)连接条件和变迁。这种方法适合于每个任务只由一个客户机负责的调度情形(即每个任务在一个客户机上一次完成),而对于一个任务由多个客户机同时负责的情况(即每个任务在多个客户机上分阶段完成),该调度方法因无法表述多客户机和多任务之间的协同关系,因而无法实现正常的调度。
2、在工作流的多任务调度中,经常会出现已执行的任务被退回或重新执行的逆向调度情况。而在以Petri网为基础的工作流网中,用库所(P)表示条件,用变迁(T)表示任务,任务只能正向调度,不能逆向调度。因此,这种调度方法的实用性较低。
发明内容
本发明的目的在于实现多步任务和多客户机之间的协同,和实现多步任务的正向和逆向调度,实用性强,调度灵活。
本发明的技术方案是这样实现的:
1、一种用于工作流引擎的多任务协同调度方法,其特征在于:按照如下步骤进行:
(1)构建多任务协同方法的计算模型——多步任务协同网,这是一个四元组N=(C,T;W,D)按照如下充分必要条件构造的:
1°C≠φ
2°T≠φ
3°CI T=φ
4°WC×T
5°DT×C
6°dom(W)Ycod(W)=CY T
其中,
在四元组中,C是一个有限的客户机集合;T是一个有限的任务集合;W是工作的集合,表示客户机在任务中的分工;D是转发的集合,表示任务的流转方向。
(2)构建多步任务协同网的动态结构——多步任务协同网系统,这是一个八元组∑=(C,T;W,D;W0,PD,G,L)按照如下条件构造的:
1°N=(C,T;W,D)是一个多步任务协同网。
2°W0W,是起始工作的集合。起始工作是指不依赖于任何任务客户机就可以办理的工作。
3°PD是定义在D上的转发条件的集合。转发条件指转发依赖的条件。
4°G是定义在C上的分组的集合。如果客户机即将办理的工作和已完成任务之间存在依赖关系,则需要将这些工作和传递这些任务的转发划分成一组,称为分组。
5°LW∪D,是循环的集合。循环指可被反复执行的,并只保留最后一次执行信息的环形路径。
(3)构建多任务调度所需的状态集合,包括五个状态集合:
1°案例的状态集合:Si={Sir,Siw,Swf}。案例是多步任务协同网的一次执行,一个多步任务协同网可以被多次执行,每次执行都对应一个不同的案例。其中,
Sir就绪状态:案例等待执行的状态,
Siw在办状态:案例正在执行的状态,
Sif完成状态:案例已经结束的状态。
2°工作的状态集合:Sw={Swr,Sww,Swn,Swf}。其中,
Swr就绪状态:工作等待客户机办理的状态,
Sww在办状态:工作正在被客户机办理的状态,
Swn否定状态:工作因条件不满足不能被客户机办理的状态,
Swf完成状态:工作已经结束的状态。
3°务的状态集合:St={Str,Stw,Stn,Stf}。其中,
Str就绪状态:任务等待客户机办理的状态,
Stw在办状态:任务正在被客户机办理的状态,
Stn否定状态:任务因条件不满足不能被客户机办理的状态,
Stf完成状态:任务已经结束的状态。
4°转发的状态集合:Sd={Sdr,Sdw,Sdn,Sdf}。其中,
Sdr就绪状态:转发等待被执行的状态,
Sdw待签状态:转发等待被客户机签收的状态,
Sdn否定状态:转发因条件不满足不能被客户机签收的状态,
Sdf完成状态:转发已经结束的状态。
5°循环的状态集合:Sl={Slr,Slw,Sdf}。其中,
Slr就绪状态:循环等待被执行的状态,
Slw工作状态:循环正在被执行的状态,
Slf完成状态:循环已经结束的状态。
(4)多任务调度包括启动案例、终止案例、客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环八个调度方法。在多任务调度之前,案例和所有的工作、任务、转发、循环都被初始化为就绪状态。启动案例是第一个被执行调度,客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环是根据多步任务协同网的流向,包括正向和逆向,由客户机进行调度的,终止案例的调度是根据工作和转发的状态由系统自动调度的。
令:
SetStatus(x)表示设置对象x的状态,x为案例、任务、工作、转发或循环;
GetStatus(x)表示获得对象x的状态,x为案例、任务、工作、转发或循环;
SetClient(x)表示设置对象所属客户机,x为工作或转发;
GetClient(x)表示获得对象所属客户机,x为工作或转发;
PreCondition(x)表示条件计算,结果为True或False,x为转发;
Count(x)表示集合中对象的数目,x为一个集合。
则多步任务的调度方法可表述如下:
1°启动案例。
设w0为案例i的任一起始工作,W0是w0的集合,则启动案例的调度方法如下:
将案例和每一个起始工作的状态设置为在办状态。即
SetStatus(1):=Siw
SetStatus(w0):=Sww,w0∈W0。
2°终止案例
设w为案例i的任一工作,W是w的集合,d为案例i的任一转发,D是d的集合,则终止案例的调度方法为:
第一步:若案例中仍有待办的工作或待签收的任务,即
或
则不能终止案例,结束;否则转第二步。
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif。
3°客户机签办任务。
设c是案例冲的任一客户机,gc是定义在c上的任一分组,d分组gc中的任一转发,D是d的集合,’t是d所属的任务,
d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合。则客户机c签办任务的调度方法如下:
第一步:若gc中的每一个转发d都处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束;
第二步:若gc中的每一个转发d都处于否定状态,即GetStatus(d)=Sdn,d∈D,则转第三步;否则转第四步;
第三步:将gc中的每一个工作w设置为否定状态,即SetStatus(w):=Swn,w∈W;对于每一个w,若其所属任务t的每一个工作
w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将任务t和任务t的每一个转发d′设置为否定状态,即SetStatus(t):=StnSetStatus(d′):=Sdn,d′∈D,结束;否则结束。
第四步:对于gc中的任一个d,若其处于待签状态,则将d的客户机设置为c,即SetClient(d):=c,则转第六步;否则将d的客户机设置为空值null,即SetClient(d):=null,并转第五步;
第五步:若d所属任务’t处于否定状态,即GetStatus(′t):=Stn,则将任务’t和其每一个工作’w及每一个转发
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′w):=Swf,′w∈′W,SetStatus(
d):=Sdf,
d∈
D;
第六步:将gc中的每一个转发d设置为完成状态,每一个工作w设置为完成状态,并将每一个工作w的客户机设置为c,即SetStatus(d):=Sdf,d∈D,SetClient(w):=c,w∈W,SetStatus(w):=Sww,w∈W。若gc中仍有转发d处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第四步;否则转第七步。
第七步:若任务t处于就绪状态,即GetStatus(t)=Str,则将任务t设置为在办状态,即SetStatus(t):=Stw;
第八步:客户机c办理gc中的任一个工作w。
第九步:若工作w办理完毕,则将工作w设置为完成状态,即SetStatus(w):=Swf。若gc中仍有处于在办状态的工作,即
则转第八步;否则结束。
4°客户机退回任务。
设c是案例冲的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,
d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合,则客户机c退回任务的调度方法如下:
第一步:若gc中的每一个工作w都处于在办状态,即GetStatus(w)=Sww,w∈W,则转第二步;否则结束。
第二步:将gc中的每一个工作w都设置为就绪状态,即SetStatus(w):=Swr,w∈W。对于gc中的每一个工作w,若w所属任务t的每一个工作
w都处于就绪状态,即GetStatus(
w)=Swr,
w∈
W,则将任务t设置为就绪状态,即SetStatus(t):=Str。
第三步:对于gc中的任一个d,若其客户机为c,即GetClient(d)=c,则将d的客户机设置为null,并将d设置为待签状态,即SetClient(d):=null,SetStatus(d):=Sdw,之后转第五步;否则将d设置为否定状态,即SetStatus(d):=Sdn,之后转第四步。
第四步:若d所属任务′t的每一个转发
d都处于否定状态,即GetStatus(d)=Sdn,
d∈
D,并且任务′t的每一个工作′w的客户机都为空值null,即GetClient(′w)=null,′w∈′W,则将任务′t设置为否定状态,即SetStatus(′t):=Stn。结束。
5°多步任务办理。
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合。则任务t办理过程的调度方法如下:
第一步:若任务t的每一个工作w都处于完成或否定状态,即GetStatus(w)∈{Swf,SWn},
w∈W,则转第二步;否则结束。
第二步:若任务t的每一个工作w都处于否定状态,即GetStatus(w)=Swn,
w∈W,
则将任务t和任务t的每一个转发d设置为否定状态,即SetStatus(t):=Stn SetStatus(d):=Sdn,d∈D,之后转第七步;否则转第三步。
第三步:对于t中的任一个w,若w处于否定状态,则将w设置为完成状态,将w的客户机设置为空值null,将与w处于同一分组gc中的每一个工作
w和每一个转发′d设置为完成状态,即SetStatus(w):=Swf,SetClient(w):=null,SetStatus(
w)=Swf,
w∈
W,SetStatus(′d)=Sdf,′d∈′D,之后转第四步;否则转第五步。
第四步:对于任一个′d,若′d所属任务′t处于否定状态,即GetStatus(′t)=Stn,则将任务′t和任务′t的每一个转发′
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′
d):=Sdf,′
d∈′
D。
第五步:若任务t有工作w处于否定状态,即
则转第三步;否则转第六步。
第六步:将任务t设置为完成状态,即
计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn。
第七步:对于任一个d,若其所属分组gc’中的所有转发
d处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设设置为否定状态,即SetStatus(w′):=SWn,w′∈W′。
第八步:对于任一个w′,若其所属任务t’中的所有工作
w′处于否定状态,即GetStatusS(
w′)=Swn,
w′∈
W′,则将任务t’和任务t’的所有转发d′设置为否定状态,即SetStatus(t′):=Stn SetStatus(d′)=Sdn,d′∈D′。
6°多步任务重办。
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合。则客户机c重办任务t的调度方法如下:
第一步:若任务t处于在办状态,即GetStatus(t)=Stw,或任务t处于完成状态且任务t没有转发,即GetStatus(t)=Stf & Count(D)=0,或任务t处于完成状态且任务t的每一个转发d都处于待签或否定状态,即GetStatus(t)=Stf & GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束。
第二步:对于任一个d,若其所属分组gc’中的每一个转发
d都处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′,之后转第三步;否则转第四步。
第三步:对于任一个w′,若其所属任务t’处于否定状态,则将任务t’和任务t’的每一个转发d′设置为就绪状态,即SetStatus(t′):=Str SetStatus(d′)=Sdr,d′∈D′。
第四步:将任务t和任务t要重办的工作w设置为在办状态,并将任务t的每一个转发d设置为就绪状态,即SetStatus(w):=Sww,SetStatus(t):=Stw,SetStatus(d):=Sdr,d∈D。对于任一个d,若其所属分组gc’中有工作W′处于否定状态,即
则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′。
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即
&
则将w置为否定状态,即SetStatus(w):=Swn。
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将gc中的每一个转发′d设置为否定状态,即SetStatus(′d):=Sdn,′d∈′D。
第七步:对于任一个′d,若其所属任务′t处于完成状态,且任务′t的每一个工作′w的客户机都为空值null,即GetStatus(′t)=Stf & GetClient(′w)=null,′w∈′W,则将任务′t和任务′t的每一个工作′w都设置为否定状态,即SetStatus(′t):=Stn SetStatus(′w):=Swn,′w∈′W。
第八步:客户机c重办工作w。
第九步:若工作w办理完毕,则将工作w置为完成状态,即SetStatus(w):=Swf,结束。否则转第八步。
7°启动循环。
设L为案例i的任一循环,w是循环路径上的任一工作,则启动循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于就绪状态,即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slr,则将循环L设置为运行状态,即SetStatus(L):=Slw;否则结束。
8°终止循环。
设L为案例i的任一循环,w是循环路径上的任一工作,则终止循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于运行状态,即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slw,则将循环L设置为运行状态,即SetStatus(L):=Slf;否则结束。
本发明实现了在工作流的多任务调度中,当任务在多个客户机上分阶段完成时,多步任务和客户机之间的协同方法,和多步任务的正向和逆向调度方法,包括启动案例、终止案例、客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环的调度方法。经基于该调度方法的工作流引擎软件的实际测试,该调度方法完全满足需求,很好地实现了本发明的目的。
附图说明
图1是本发明案例启动调度流程图
图2是本发明案例终止调度流程图
图3是本发明客户机签办和退回任务示意图
图4是本发明客户机签办任务流程图
图5是本发明客户机退回任务流程图
图6是本发明任务办理和重办示意图
图7是本发明任务办理流程图
图8是本发明任务重办流程图
图9是本发明启动循环流程图
图10是本发明终止循环流程图
图11是本发明实例示意图
具体实施方式
参照图1所示,
设w0为案例i的任一起始工作,W0是w0的集合,则启动案例的调度方法如下:
将案例和每一个起始工作的状态设置为在办状态。即
SetStatus(i):=Siw
SetStatus(w0):=Sww,w0∈W0。
参照图2所示,
设w为案例i的任一工作,W是w的集合,d为案例i的任一转发,D是d的集合,则终止案例的调度方法为:
第一步:若案例中仍有待办的工作或待签收的任务,即
或
则不能终止案例,结束;否则转第二步。
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif。
参照图3所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合。
参照图4所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是所属的任务,d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合。则客户机c签办任务的调度方法如下:
第一步:若gc中的每一个转发d都处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束;
第二步:若gc中的每一个转发d都处于否定状态,即GetStatus(d)=Sdn,d∈D,则转第三步;否则转第四步;
第三步:将gc中的每一个工作w设置为否定状态,即SetStatus(w):=Swn,w∈W;对于每一个w,若其所属任务t的每一个工作
w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将任务t和任务t的每一个转发d′设置为否定状态,即SetStatus(t):=StnSetStatus(d′):=Sdn,d′∈D′,结束;否则结束。
第四步:对于gc中的任一个d,若其处于待签状态,则将d的客户机设置为c,即SetClient(d):=c,则转第六步;否则将d的客户机设置为空值null,即SetClient(d):=null,并转第五步;
第五步:若d所属任务’t处于否定状态,即GetStatus(′t):=Stn,则将任务’t和其每一个工作’w及每一个转发
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′w):=Swf,′w∈′W,SetStatus(
d):=Sdf,
d∈
D;
第六步:将gc中的每一个转发d设置为完成状态,每一个工作w设置为完成状态,并将每一个工作w的客户机设置为c,即SetStatus(d):=Sdf,d∈D,SetClient(w):=c,w∈W,SetStatus(w):=Sww,w∈W。若gc中仍有转发d处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第四步;否则转第七步。
第七步:若任务t处于就绪状态,即GetStatus(t)=Str,则将任务t设置为在办状态,即SetStatus(t):=Stw;
第八步:客户机c办理gc中的任一个工作w。
第九步:若工作w办理完毕,则将工作w设置为完成状态,即SetStatus(w):=Swf。
若gc中仍有处于在办状态的工作,即
则转第八步;否则结束。
参照图5所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,
d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合,则客户机c退回任务的调度方法如下:
第一步:若gc中的每一个工作w都处于在办状态,即GetStatus(w)=Sww,w∈W,则转第二步;否则结束。
第二步:将gc中的每一个工作w都设置为就绪状态,即SetStatus(w):=Swr,w∈W。对于gc中的每一个工作w,若w所属任务t的每一个工作
w都处于就绪状态,即GetStatus(w)=Swr,
w∈
W,则将任务t设置为就绪状态,即SetStatus(t):=Str。
第三步:对于gc中的任一个d,若其客户机为c,即GetClient(d)=c,则将d的客户机设置为null,并将d设置为待签状态,即SetClient(d):=null,SetStatus(d):=Sdw,之后转第五步;否则将d设置为否定状态,即SetStatus(d):=Sdn,之后转第四步。
第四步:若d所属任务′t的每一个转发
d都处于否定状态,即GetStatus(
d)=Sdn,d∈
D,并且任务′t的每一个工作′w的客户机都为空值null,即GetClient(′w)=null,′w∈′W,则将任务′t设置为否定状态,即SetStatus(′t):=Stn。结束。
参照图6所示,
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合。
参照图7所示,
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合。则任务t办理过程的调度方法如下:
第一步:若任务t的每一个工作w都处于完成或否定状态,即GetStatus(w)∈{Swf,Swn},
w∈W,则转第二步;否则结束。
第二步:若任务t的每一个工作w都处于否定状态,即GetStatus(w)=Swn,
w∈W,则将任务t和任务t的每一个转发d设置为否定状态,即SetStatus(t):=Stn SetStatus(d):=Sdn,d∈D,之后转第七步;否则转第三步。
第三步:对于t中的任一个w,若w处于否定状态,则将w设置为完成状态,将w的客户机设置为空值null,将与w处于同一分组gc中的每一个工作
w和每一个转发′d设置为完成状态,即SetStatus(w):=Swf,SetClient(w):=null,SetStatus(
w)=Swf,
w∈
W,SetStatus(′d)=Sdf,′d∈′D,之后转第四步;否则转第五步。
第四步:对于任一个′d,若′d所属任务′t处于否定状态,即GetStatus(′t)=Stn,则将任务′t和任务′t的每一个转发′
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′
d):=Sdf,′
d∈′
D。
第五步:若任务t有工作w处于否定状态,即
则转第三步;否则转第六步。
第六步:将任务t设置为完成状态,即
计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn。
第七步:对于任一个d,若其所属分组gc’中的所有转发
d处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设置为否定状态,即SetStatus(w′):=Swn,w′∈W′。
第八步:对于任一个w′,若其所属任务t’中的所有工作
w′处于否定状态,即GetStatusS(
w′)=Swn,
w′∈
W′,则将任务t’和任务t’的所有转发d′设置为否定状态,即SetStatus(t′):=Stn SetStatus(d′)=Sdn,d′∈D′。
参照图8所示,
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合。则客户机c重办任务t的调度方法如下:
第一步:若任务t处于在办状态,即GetStatus(t)=Stw,或任务t处于完成状态且任务t没有转发,即GetStatus(t)=Stf&Count(D)=0,或任务t处于完成状态且任务t的每一个转发d都处于待签或否定状态,即GetStatus(t)=Stf&GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束。
第二步:对于任一个d,若其所属分组gc’中的每一个转发
d都处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′,之后转第三步;否则转第四步。
第三步:对于任一个w′,若其所属任务t’处于否定状态,则将任务t’和任务t’的每一个转发d′设置为就绪状态,即SetStatus(t′):=Str SetStatus(d′)=Sdr,d′∈D′。
第四步:将任务t和任务t要重办的工作w设置为在办状态,并将任务t的每一个转发d设置为就绪状态,即SetStatus(w):=Sww,SetStatus(t):=Stw,SetStatus(d):=Sdr,d∈D。对于任一个d,若其所属分组gc’中有工作w′处于否定状态,即
则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′。
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即
&
则将w设置为否定状态,即SetStatus(w):=Swn。
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作
w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将gc中的每一个转发′d设置为否定状态,即SetStatus(′d):=Sdn,′d∈′D。
第七步:对于任一个′d,若其所属任务′t处于完成状态,且任务′t的每一个工作′w的客户机都为空值null,即GetStatus(′t)=Stf&GetClient(′w)=null,′w∈′W,则将任务′t和任务′t的每一个工作′w都设置为否定状态,即SetStatus(′t):=Stn SetStatus(′w):=Swn,′w∈′W。
第八步:客户机c重办工作w。
第九步:若工作w办理完毕,则将工作w设置为完成状态,即SetStatus(w):=Swf,结束。否则转第八步。
参照图9所示,
设L为案例i的任一循环,w是循环路径上的任一工作,则启动循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于就绪状态,即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slr,则将循环L设置为运行状态,即SetStatus(L):=Slw;否则结束。
参照图10所示,
设L为案例i的任一循环,w是循环路径上的任一工作,则终止循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于运行状态,即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slw,则将循环L设置为运行状态,即SetStatus(L):=Slf;否则结束。
参照图11所示,
案例i中有6个客户机(c1、c2、c3、c4、c5和c6)和7个任务(t1、t2、t3、t4、t5、t6、t7),其中任务t1、t5和t7是多步任务(在多个客户机上分步完成),工作w1_1、w1_1和w_5是启动工作,转发d1_1和d1_2是条件转发,在c6上定义了2个分组,d2和w6_2为分组g1,d1_2和w6_1为分组g2,其它所有没有定义分组的客户机默认为同一个分组,w2_1、d4、w3_1和d3是一个循环l。
多步任务协同网可以用图形表示,简称网的图。在本实施例中,采用了如图11的图形表示方法:客户机用圆圈表示,任务用矩形表示,工作和转发用带有箭头的直线表示,起始工作和条件转发用空心箭头表示,循环用直线起始端的小圆圈表示(仅循环用为空心),分组用标在直线上的靠近客户机端的数字表示。
在案例没有启动前,案例和案例中所有的工作、任务、转发、循环都处于就绪状态。
1、案例i的正向调度示例。
(1)当i启动后,S(i)=Siw,S(w1_1)=Sww,S(w1_1)=Sww,S(w_5)=Sww,S(t1)=Stw,S(t2)=Stw。
(2)由图中可以看出,t1由c1和c5同时负责,对应工作w1_1和w5,t2由c1负责,对应工作w1_2。
(3)当w1_1和w5办理完毕后,S(w1_1)=Swf,S(w5)=Swf,S(t1)=Stf,由于d1_1和d1_2是条件转发,需要根据条件设置进行条件判断,这里假设P(d1_1)=True,P(d1_2)=False,则S(d1_1)=Sdw,S(d1_2)=Sdn。
(4)当w1_2办理完毕后,S(w1_2)=Swf,S(t2)=Stf,S(d2)=Sdw。
(5)c2没有定义分组,默认所有转发和工作为一组。由于d3为仅循环用(启动循环运行时才有效),这里假设不启动循环,所以c2可以签办任务t1,签办后,S(d1_1)=Sdf,S(w2_1)=Sww,S(w2_1)=Swn,S(t4)=Stw,S(t5)=Stw。
(6)c6上定义了2个分组,d2和w6_2为分组g1,d1_2和w6_1为分组g2。对于g1,c6签办任务t2后,S(d2)=Sdf,S(w6_2)=Sww,S(t6)=Stw。对于g2,由于S(d1_2)=Sdn,所以S(w6_1)=Swn。
(7)当w2_1办理完毕后,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw。
(8)当w2_2办理完毕后,S(w2_2)=Swf,由于S(w6_1)=Swn,S(t5)=Stf,S(d5_1)=Sdw,S(d5_2)=Sdw。
(9)当w6_2办理完毕后,S(w6_2)=Swf,S(t6)=Stf。
(10)c3没有定义分组,默认所有转发和工作为一组。由于w3_1为仅循环用,这里假设不启动循环,所以c3签办任务t4和t5后,S(d4)=Sdf,S(d5_1)=Sdf,S(w3_2)=Sww。
(11)c4没有定义分组,默认所有转发和工作为一组。c4签办任务t5后,S(d5_2)=Sdf,S(w4)=Sww。
(12)当w3_2和w4办理完毕后,S(w3_2)=Swf,S(w4)=Swf,S(t7)=Stf,由于i中没有任何一个w和d处于待办或待签状态,所以i结束,S(i)=Sif。
2、案例的逆向调度过程示例。
(1)客户机重办任务:
设案例i正向调度到第(4)步,由于S(d1_1)=Sdw,S(d1_2)=Sdn,S(d1_2)=Sdn,所以c5可以重办t1,c1可以重办t1和t2。这里设c1重办t1,重办后,S(d1_1)=Sdr,S(d1_2)=Sdr,S(t1)=Stw,S(w1_1)=Sww。
(2)客户机退回任务:
设案例i正向调度到第(6)步,由于S(w2_1)=Sww,S(w2_1)=Swn,S(w6_1)=Swn,S(w6_2)=Sww,S(t4)=Stw,S(t5)=Stw,S(t6)=Stw,所以c2和c6都可以退回任务。这里设c6退回分组g1的签办的任务t2,则S(w6_2)=Swr,S(d2)=Sdw。可以看出,当c6退回签办的t2后,c1还可以重办w1_2,从而连续实现多步任务调度过程中的逆向。
3、案例的循环调度过程示例。
设案例i正向调度到第(10)步,c3启动循环l,则S(l)=Slw,S(w3_1)=Sww,S(t3)=Stw;当w3_1办理完毕后,S(w3_1)=Swf,S(t3)=Stf,S(d3)=Sdw;这时,c2可以签办任务t3,由于循环将路径中工作、任务和转发统一按照就绪状态处理,而w2_2不在循环中,所以签办后S(d3)=Sdf,S(2_1)=Sww,S(t4)=Stw;当w2_1办理完毕后,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw;此时c3如果中止循环,则S(l)=Slf,循环结束,如果不中止循环,ce可以接着办理w3_1,则S(w3_1)=Sww,S(t3)=Stw,如此反复循环直至终止循环。
Claims (1)
1、一种用于工作流引擎的多任务协同调度方法,其特征在于:按照如下步骤进行:
(i)构建多任务协同方法的计算模型——多步任务协同网,这是一个四元组N=(C,T;W,D)按照如下充分必要条件构造的:
1°C≠φ
2°T≠φ
3°CI T=φ
4°WC×T
5°DT×C
6°dom(W)Y cod(W)=CYT
其中,
在四元组中,C是一个有限的客户机集合;T是一个有限的任务集合;W是工作的集合,表示客户机在任务中的分工;D是转发的集合,表示任务的流转方向;
(2)构建多步任务协同网的动态结构——多步任务协同网系统,这是一个八元组∑=(C,T;W,D;W0,PD,G,L)按照如下条件构造的:
1°N=(C,T;W,D)是一个多步任务协同网;
2°W0W,是起始工作的集合,起始工作是指不依赖于任何任务客户机就可以办理的工作;
3°PD是定义在D上的转发条件的集合,转发条件指转发依赖的条件;
4°G是定义在C上的分组的集合,如果客户机即将办理的工作和已完成任务之间存在依赖关系,则需要将这些工作和传递这些任务的转发划分成一组,称为分组;
5°LW∪D,是循环的集合,循环指可被反复执行的,并只保留最后一次执行信息的环形路径;
(3)构建多任务调度所需的状态集合,包括五个状态集合:
1°案例的状态集合:Si={Sir,Siw,Swf},案例是多步任务协同网的一次执行,一个多步任务协同网可以被多次执行,每次执行都对应一个不同的案例,其中,
Sir就绪状态:案例等待执行的状态,
Siw在办状态:案例正在执行的状态,
Sif完成状态:案例已经结束的状态;
2°工作的状态集合:Sw={Swr,Sww,Swn,Swf},其中,
Swr就绪状态:工作等待客户机办理的状态,
Sww在办状态:工作正在被客户机办理的状态,
Swn否定状态:工作因条件不满足不能被客户机办理的状态,
Swf完成状态:工作已经结束的状态;
3°任务的状态集合:St={Str,Stw,Stn,Stf},其中,
Str就绪状态:任务等待客户机办理的状态,
Stw在办状态:任务正在被客户机办理的状态,
Stn否定状态:任务因条件不满足不能被客户机办理的状态,
Stf完成状态:任务已经结束的状态;
4°转发的状态集合:Sd={Sdr,Sdw,Sdn,Sdf},其中,
Sdr就绪状态:转发等待被执行的状态,
Sdw待签状态:转发等待被客户机签收的状态,
Sdn否定状态:转发因条件不满足不能被客户机签收的状态,
Sdf完成状态:转发已经结束的状态;
5°循环的状态集合:S1={Slr,Slw,Sdf};其中,
Slr就绪状态:循环等待被执行的状态,
Slw工作状态:循环正在被执行的状态,
Slf完成状态:循环已经结束的状态;
(4)多任务调度包括启动案例、终止案例、客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环八个调度方法;在多任务调度之前,案例和所有的工作、任务、转发、循环都被初始化为就绪状态;启动案例是第一个被执行调度,客户机签办任务、客户机退回任务、多步任务办理、多步任务重办、启动循环和终止循环是根据多步任务协同网的流向,包括正向和逆向,由客户机进行调度的,终止案例的调度是根据工作和转发的状态由系统自动调度的;
令:
SetStatus(x)表示设置对象x的状态,x为案例、任务、工作、转发或循环;
GetStatus(x)表示获得对象x的状态,x为案例、任务、工作、转发或循环;
SetClient(x)表示设置对象所属客户机,x为工作或转发;
GetClient(x)表示获得对象所属客户机,x为工作或转发;
PreCondition(x)表示条件计算,结果为True或False,x为转发;
Count(x)表示集合中对象的数目,x为一个集合;
则多步任务的调度方法可表述如下:
1°启动案例:
设w0为案例i的任一起始工作,W0是w0的集合,则启动案例的调度方法如下:
将案例和每一个起始工作的状态设置为在办状态,即
SetStatus(i):=Siw
SetStatus(w0):=Sww,w0∈W0
2°终止案例:
设w为案例i的任一工作,W是w的集合,d为案例i的任一转发,D是d的集合,则终止案例的调度方法为:
第一步:若案例中仍有待办的工作或待签收的任务,即GetStatus(w)=Sww,
或GetStatus(d)=Sdw,
则不能终止案例,结束;否则转第二步;
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif;
3°客户机签办任务:
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,
d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d’是任务t中的任一转发,D’是d’的集合,则客户机c签办任务的调度方法如下:
第一步:若gc中的每一个转发d都处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束;
第二步:若gc中的每一个转发d都处于否定状态,即GetStatus(d)=Sdn,d∈D,则转第三步;否则转第四步;
第三步:将gc中的每一个工作w设置为否定状态,即SetStatus(w):=Swn,w∈W;对于每一个w,若其所属任务t的每一个工作
w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将任务t和任务t的每一个转发d′设置为否定状态,即SetStatus(t):=StnSetStatus(d′):=Sdn,d′∈D′,结束;否则结束;
第四步:对于gc中的任一个d,若其处于待签状态,则将d的客户机设置为c,即SetCliet(d):=c,则转第六步;否则将d的客户机设置为空值null,即SetClient(d):=null,并转第五步;
第五步:若d所属任务’t处于否定状态,即GetStatus(′t):=Stn,则将任务’t和其每一个工作’w及每一个转发
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′w):=Swf,′w∈′W,SetStatus(
d):=Sdf,
d∈
D;
第六步:将gc中的每一个转发d设置为完成状态,每一个工作w设置为完成状态,并将每一个工作w的客户机设置为c,即SetStatus(d):=Sdf,d∈D,SetClient(w):=c,w∈W,SetStatus(w):=Sww,w∈W;若gc中仍有转发d处于待签或否定状态,即GetStatus(d)∈{Sdw,Sdn},d∈D,则转第四步;否则转第七步;
第七步:若任务t处于就绪状态,即GetStatus(t)=Str,则将任务t设置为在办状态,即SetStatus(t):=Stw;
第八步:客户机c办理gc中的任一个工作w;
第九步:若工作w办理完毕,则将工作w设置为完成状态,即SetStatus(w):=Swf;若gc中仍有处于在办状态的工作,即GetStatus(w)=Sww,
则转第八步;否则结束;
4°客户机退回任务:
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,
d是任务’t中的任一转发,
D是
d的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,
w是任务t中的任一工作,
W是
w的集合,d是任务t中的任一转发,D’是d’的集合,则客户机c退回任务的调度方法如下:
第一步:若gc中的每一个工作w都处于在办状态,即GetStatus(w)=Sww,w∈W,则转第二步;否则结束;
第二步:将gc中的每一个工作w都设置为就绪状态,即SetStatus(w):=Swr,w∈W;对于gc中的每一个工作w,若w所属任务t的每一个工作
w都处于就绪状态,即GetStatus(
w)=Swr,
w∈
W,则将任务t设置为就绪状态,即SetStatus(t):=Str;
第三步:对于gc中的任一个d,若其客户机为c,即GetClient(d)=c,则将d的客户机设置为null,并将d设置为待签状态,即SetClient(d):=null,SetStatus(d):=Sdw,之后转第五步;否则将d设置为否定状态,即SetStatus(d):=Sdn,之后转第四步;
第四步:若d所属任务′t的每一个转发
d都处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,并且任务′t的每一个工作′w的客户机都为空值null,即GetClient(′w)=null,′w∈′W,则将任务′t设置为否定状态,即SetStatus(′t):=Stn;结束;
5°多步任务办理:
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合,则任务t办理过程的调度方法如下:
第一步:若任务t的每一个工作w都处于完成或否定状态,即GetStatus(w)∈{Swf,Swn},
则转第二步;否则结束;
第二步:若任务t的每一个工作w都处于否定状态,即GetStatus(w)=Swn,
则将任务t和任务t的每一个转发d设置为否定状态,即SetStatus(t):=Stn SetStatus(d):=Sdn,d∈D,之后转第七步;否则转第三步;
第三步:对于t中的任一个w,若w处于否定状态,则将w设置为完成状态,将w的客户机设置为空值null,将与w处于同一分组gc中的每一个工作
w和每一个转发′d设置为完成状态,即SetStatus(w):=Swf,SetClient(w):=null,SetStatus(
w)=Swf,
w∈
W,SetStatus(′d)=Sdf,′d∈′D,之后转第四步;否则转第五步;
第四步:对于任一个′d,若′d所属任务′t处于否定状态,即GetStatus(′t)=Stn,则将任务′t和任务′t的每一个转发′
d设置为完成状态,即SetStatus(′t):=Stf,SetStatus(′
d):=Sdf,′
d∈′
D;
第五步:若任务t有工作w处于否定状态,即GetStatus(w)=Swn,
则转第三步;否则转第六步;
第六步:将任务t设置为完成状态,即SetStatus(t):=Stf,
计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn;
第七步:对于任一个d,若其所属分组gc’中的所有转发
d处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设置为否定状态,即SetStatus(w′):=Swn,w′∈W′;
第八步:对于任一个w′,若其所属任务t’中的所有工作
w′处于否定状态,即GetStatusS(
w′)=Swn,
w′∈
W′,则将任务t’和任务t’的所有转发d′设置为否定状态,即SetStatus(t′):=Stn SetStatus(d′)=Sdn,d′∈D′;结束;
6°多步任务重办:
设t是案例中的任一任务,w是任务t的任一工作,W是w的集合,c是负责办理工作w的客户机,gc是定义在客户机c上的任一分组,’d是分组gc中的任一转发,’D是’d的集合,’t是’d所属的工作,’w是任务’t的任一工作,’W是’w的集合,’
d是’t的任一转发,’
D是’
d的集合,
w是分组gc中的任一工作,
W是
w的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组,
d是分组gc’中的任一转发,
D是
d的集合,w’是分组gc’中的任一工作,W’是w’的集合,t’是w’所属的任务,w’是任务t’中的任一工作,
W’是
w’的集合,d’是t’的任一转发,D’是d’的集合,则客户机c重办任务t的调度方法如下:
第一步:若任务t处于在办状态,即GetStatus(t)=Stw,或任务t处于完成状态且任务t没有转发,即GetStatus(t)=Stf & Count(D)=0,或任务t处于完成状态且任务t的每一个转发d都处于待签或否定状态,即GetStatus(t)=Stf & GetStatus(d)∈{Sdw,Sdn},d∈D,则转第二步;否则结束;
第二步:对于任一个d,若其所属分组gc’中的每一个转发d都处于否定状态,即GetStatus(
d)=Sdn,
d∈
D,则将分组gc’中的所有工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′,之后转第三步;否则转第四步;
第三步:对于任一个w′,若其所属任务t’处于否定状态,则将任务t’和任务t’的每一个转发d′设置为就绪状态,即SetStatus(t′)=Str SetStatus(d′)=Sdr,d′∈D′;
第四步:将任务t和任务t要重办的工作w设置为在办状态,并将任务t的每一个转发d设置为就绪状态,即SetStatus(w):=Sww,SetStatus(t):=Stw,SetStatus(d):=Sdr,d∈D;对于任一个d,若其所属分组gc’中有工作w′处于否定状态,即GetStatus(w′)=Swn, 则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′;
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即GetStatus(w)=Swf& GetClient(w)=null,
则将w设置为否定状态,即SetStatus(w):=Swn;
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作
w都处于否定状态,即GetStatus(
w)=Swn,
w∈
W,则将gc中的每一个转发′d设置为否定状态,即SetStatus(′d):=Sdn,′d∈′D;
第七步:对于任一个′d,若其所属任务′t处于完成状态,且任务′t的每一个工作′w的客户机都为空值null,即GetStatus(′t)=Stf & GetClient(′w)=null,′w∈′W,则将任务′t和任务′t的每一个工作′w都设置为否定状态,即SetStatus(′t):=Stn SetStatus(′w):=Swn,′w∈′W;
第八步:客户机c重办工作w;
第九步:若工作w办理完毕,则将工作w设置为完成状态,即SetStatus(w):=Swf,结束;否则转第八步;
7°启动循环:
设L为案例i的任一循环,w是循环路径上的任一工作,则启动循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于就绪状态,即w∈L &GetStatus(w)=Sww & GetStatus(L)=Slr,则将循环L设置为运行状态,即SetStatus(L):=Slw;否则结束;
8°终止循环:
设L为案例i的任一循环,w是循环路径上的任一工作,则终止循环的调度方法如下:
若工作w属于循环L且工作w处于在办状态且循环L处于运行状态,即w∈L&GetStatus(w)=Sww& GetStatus(L)=Slw,则将循环L设置为运行状态,即SetStatus(L):=Slf;否则结束。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CNA2005100428886A CN1728165A (zh) | 2005-07-04 | 2005-07-04 | 一种用于工作流引擎的多任务协同调度方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CNA2005100428886A CN1728165A (zh) | 2005-07-04 | 2005-07-04 | 一种用于工作流引擎的多任务协同调度方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN1728165A true CN1728165A (zh) | 2006-02-01 |
Family
ID=35927424
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CNA2005100428886A Pending CN1728165A (zh) | 2005-07-04 | 2005-07-04 | 一种用于工作流引擎的多任务协同调度方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN1728165A (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102193823A (zh) * | 2010-03-12 | 2011-09-21 | 微软公司 | 允许元编程的最优增量工作流执行 |
| CN102609809A (zh) * | 2012-01-18 | 2012-07-25 | 西安交通大学 | 一种通过查表实现工作流循环控制的方法 |
-
2005
- 2005-07-04 CN CNA2005100428886A patent/CN1728165A/zh active Pending
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102193823A (zh) * | 2010-03-12 | 2011-09-21 | 微软公司 | 允许元编程的最优增量工作流执行 |
| CN102609809A (zh) * | 2012-01-18 | 2012-07-25 | 西安交通大学 | 一种通过查表实现工作流循环控制的方法 |
| CN102609809B (zh) * | 2012-01-18 | 2015-07-01 | 西安交通大学 | 一种通过查表实现工作流循环控制的方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN1152305C (zh) | 虚拟机系统 | |
| CN1680959A (zh) | 进程编辑设备和方法以及进程管理设备和方法 | |
| CN1967488A (zh) | 任务分配方法和任务分配装置 | |
| CN1304968C (zh) | 服务处理装置、服务处理方法 | |
| CN2579091Y (zh) | 利用阵列处理进行数据检测的用户装置 | |
| CN1838077A (zh) | 可调度性确定方法和实时系统 | |
| CN100347682C (zh) | 自动化测试构建方法 | |
| CN1201942A (zh) | 报文处理方法和装置及用于存储控制程序的存储介质 | |
| CN1877532A (zh) | 编译装置 | |
| CN1976240A (zh) | 便携终端以及用于该便携终端的程序 | |
| CN1315045C (zh) | 一种对机群实现集中并发管理的方法 | |
| CN101055569A (zh) | 一种电子数据表的函数收集方法和装置 | |
| CN1229728C (zh) | 具有会话管理和分布式管理功能以及相应的操作管理机制的web应用系统 | |
| CN1852177A (zh) | 测试适配器和测试工具系统及其测试方法 | |
| CN101046812A (zh) | 一种数据库表记录构造与检查的方法及其装置 | |
| CN1444161A (zh) | 物料清单(bom)数据的拆分方法 | |
| CN1728165A (zh) | 一种用于工作流引擎的多任务协同调度方法 | |
| CN1845213A (zh) | 一种实现sms4密码算法中加解密处理的方法 | |
| CN1878131A (zh) | 进行流量控制的方法和系统 | |
| CN1532755A (zh) | 联合指示信息生成装置及联合指示信息生成方法 | |
| CN1717652A (zh) | 数据处理方法和数据处理程序 | |
| CN101048739A (zh) | 多处理器系统、同步控制装置及同步控制方法 | |
| CN1532749A (zh) | 联合处理装置和联合处理方法 | |
| CN101031884A (zh) | 处理器 | |
| CN1153134C (zh) | 一种可更新一执行中的程序执行文件的系统及其方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
| WD01 | Invention patent application deemed withdrawn after publication |