[go: up one dir, main page]

CN1728165A - 一种用于工作流引擎的多任务协同调度方法 - Google Patents

一种用于工作流引擎的多任务协同调度方法 Download PDF

Info

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
Application number
CNA2005100428886A
Other languages
English (en)
Inventor
胡飞虎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XI'AN LONGZHOU TECHNOLOGY Co Ltd
Xian Jiaotong University
Original Assignee
XI'AN LONGZHOU TECHNOLOGY Co Ltd
Xian Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by XI'AN LONGZHOU TECHNOLOGY Co Ltd, Xian Jiaotong University filed Critical XI'AN LONGZHOU TECHNOLOGY Co Ltd
Priority to CNA2005100428886A priority Critical patent/CN1728165A/zh
Publication of CN1728165A publication Critical patent/CN1728165A/zh
Pending legal-status Critical Current

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°WC×T
5°DT×C
6°dom(W)Ycod(W)=CY T
其中, dom ( W ) = { x | ∃ y : ( x , y ) ∈ W } , cod ( W ) = { y | ∃ x : ( x , y ) ∈ W } :
在四元组中,C是一个有限的客户机集合;T是一个有限的任务集合;W是工作的集合,表示客户机在任务中的分工;D是转发的集合,表示任务的流转方向。
(2)构建多步任务协同网的动态结构——多步任务协同网系统,这是一个八元组∑=(C,T;W,D;W0,PD,G,L)按照如下条件构造的:
1°N=(C,T;W,D)是一个多步任务协同网。
2°W0W,是起始工作的集合。起始工作是指不依赖于任何任务客户机就可以办理的工作。
3°PD是定义在D上的转发条件的集合。转发条件指转发依赖的条件。
4°G是定义在C上的分组的集合。如果客户机即将办理的工作和已完成任务之间存在依赖关系,则需要将这些工作和传递这些任务的转发划分成一组,称为分组。
5°LW∪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的集合,则终止案例的调度方法为:
第一步:若案例中仍有待办的工作或待签收的任务,即 GetStatus ( w ) = S w w , ∃ w ∈ W GetStatus ( d ) = S d w , ∃ d ∈ D , 则不能终止案例,结束;否则转第二步。
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif
3°客户机签办任务。
设c是案例冲的任一客户机,gc是定义在c上的任一分组,d分组gc中的任一转发,D是d的集合,’t是d所属的任务, d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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, dD
第六步:将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 ) = S w w , ∃ w ∈ W , 则转第八步;否则结束。
4°客户机退回任务。
设c是案例冲的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务, d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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, dD,并且任务′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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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)=Swnw∈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, wW,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 ) = S w n , ∃ w ∈ W , 则转第三步;否则转第六步。
第六步:将任务t设置为完成状态,即 SetStatud ( t ) : = St f , ∃ w ∈ W . 计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn
第七步:对于任一个d,若其所属分组gc’中的所有转发 d处于否定状态,即GetStatus( d)=Sdn, dD,则将分组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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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, dD,则将分组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 ′ ) = Sw n , ∃ w ′ ∈ W ′ , 则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′。
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即 GetStatus ( w ) = Sw f & GetClient ( w ) = null , ∃ w ∈ W , 则将w置为否定状态,即SetStatus(w):=Swn
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作w都处于否定状态,即GetStatus( w)=Swn, wW,则将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的集合,则终止案例的调度方法为:
第一步:若案例中仍有待办的工作或待签收的任务,即 GetStatus ( w ) = S w w , ∃ w ∈ W GetStatus ( d ) = Sd w , ∃ d ∈ D , 则不能终止案例,结束;否则转第二步。
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif
参照图3所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务,d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务,w是任务t中的任一工作, Ww的集合,d’是任务t中的任一转发,D’是d’的集合。
参照图4所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是所属的任务,d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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, dD
第六步:将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 ) = Sw w , ∃ w ∈ W , 则转第八步;否则结束。
参照图5所示,
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务, d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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
Figure A20051004288800192
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, wW,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 ) = Sw n , ∃ w ∈ W , 则转第三步;否则转第六步。
第六步:将任务t设置为完成状态,即 SetStatus ( t ) : = St f , ∃ w ∈ W . 计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn
第七步:对于任一个d,若其所属分组gc’中的所有转发 d处于否定状态,即GetStatus( d)=Sdn, dD,则将分组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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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, dD,则将分组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 ′ ) = Sw n , ∃ w ′ ∈ W ′ , 则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′。
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即 GetStatus ( w ) = Sw f & GetClient ( w ) = null , ∃ w ∈ W , 则将w设置为否定状态,即SetStatus(w):=Swn
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作 w都处于否定状态,即GetStatus( w)=Swn, wW,则将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°WC×T
5°DT×C
6°dom(W)Y cod(W)=CYT
其中, dom ( W ) = { x | ∃ y : ( x , y ) ∈ W } , cod ( W ) = { y | ∃ x : ( x , y ) ∈ W } ;
在四元组中,C是一个有限的客户机集合;T是一个有限的任务集合;W是工作的集合,表示客户机在任务中的分工;D是转发的集合,表示任务的流转方向;
(2)构建多步任务协同网的动态结构——多步任务协同网系统,这是一个八元组∑=(C,T;W,D;W0,PD,G,L)按照如下条件构造的:
1°N=(C,T;W,D)是一个多步任务协同网;
2°W0W,是起始工作的集合,起始工作是指不依赖于任何任务客户机就可以办理的工作;
3°PD是定义在D上的转发条件的集合,转发条件指转发依赖的条件;
4°G是定义在C上的分组的集合,如果客户机即将办理的工作和已完成任务之间存在依赖关系,则需要将这些工作和传递这些任务的转发划分成一组,称为分组;
5°LW∪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 ∃ w ∈ W 或GetStatus(d)=Sdw ∃ d ∈ D , 则不能终止案例,结束;否则转第二步;
第二步:将案例的状态置为完称状态,即SetStatus(i):=Sif
3°客户机签办任务:
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务, d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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, dD
第六步:将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 ∃ w ∈ W , 则转第八步;否则结束;
4°客户机退回任务:
设c是案例i中的任一客户机,gc是定义在c上的任一分组,d是分组gc中的任一转发,D是d的集合,’t是d所属的任务, d是任务’t中的任一转发, Dd的集合,’w是任务’t中的任一工作,’W是’w的集合,w是分组gc中的任一工作,W是w的集合,t是w所属的任务, w是任务t中的任一工作, Ww的集合,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, wW,则将任务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, dD,并且任务′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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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, wW,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 ∃ w ∈ W , 则转第三步;否则转第六步;
第六步:将任务t设置为完成状态,即SetStatus(t):=Stf ∃ w ∈ W ; 计算任务t的每一个转发d的转发条件,若结果为真,即PreCondition(d)=True,则将转发d设置为待签状态,即SetStatus(d):=Sdw;否则将转发d设置为否定状态,即SetStatus(d):=Sdn
第七步:对于任一个d,若其所属分组gc’中的所有转发 d处于否定状态,即GetStatus( d)=Sdn, dD,则将分组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中的任一工作, Ww的集合,d是任务t的任一转发,D是d的集合,c’是d所属的客户机,gc’是定义在客户机c’上的任一分组, d是分组gc’中的任一转发, Dd的集合,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, dD,则将分组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 ∃ w ′ ∈ W ′ , 则将分组gc’中的每一个工作w′设置为就绪状态,即SetStatus(w′):=Swr,w′∈W′;
第五步:若任务t有处于完成状态的工作w,且w的客户机为null,即GetStatus(w)=Swf& GetClient(w)=null, ∃ w ∈ W , 则将w设置为否定状态,即SetStatus(w):=Swn
第六步:对于t中的任一个w,若w所属分组gc中的每一个工作 w都处于否定状态,即GetStatus( w)=Swn, wW,则将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;否则结束。
CNA2005100428886A 2005-07-04 2005-07-04 一种用于工作流引擎的多任务协同调度方法 Pending CN1728165A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102193823A (zh) * 2010-03-12 2011-09-21 微软公司 允许元编程的最优增量工作流执行
CN102609809A (zh) * 2012-01-18 2012-07-25 西安交通大学 一种通过查表实现工作流循环控制的方法

Cited By (3)

* Cited by examiner, † Cited by third party
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