<!----><o:p></o:p>
流程模型分析(3)<o:p></o:p>
——流程发散聚合模型
<o:p></o:p>
<o:p></o:p>
三、流程的运转模型<o:p></o:p>
3.1 基本运转模型<o:p></o:p>
串行(Sequence)<o:p></o:p>
自循环<o:p></o:p>
3.2 发散运转模型<o:p></o:p>
并行(Parallel)<o:p></o:p>
独占式选择(Exclusive Choice)<o:p></o:p>
鉴别式选择(Discriminator Choice)<o:p></o:p>
抄送模型<o:p></o:p>
发散模型<o:p></o:p>
3.3 聚合运转模型<o:p></o:p>
同步聚合(synchronize merge)<o:p></o:p>
简单聚合(Simple Merge)<o:p></o:p>
多重聚合(Multiple Merge)<o:p></o:p>
鉴别式聚合(Discriminator Merge)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
这里将是本文最为核心的地方了,什么是工作流,也将在其运转模型中体现。
任何事物都是循序渐进的,由简单到复杂。我们先来看看最为基本的集中运转模型
<o:p></o:p>
3.1 基本运转模型
<o:p></o:p>
串行,是最为简单,也最为容易理解的模型。按照预定的任务列表(Task A,Task B,Task C),有序的执行,如下图(3-1)所示。
<!----><v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 285pt; HEIGHT: 55.5pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image001.jpg" o:title="3-1"></v:imagedata></v:shape>
图(3-1)<o:p></o:p>
自循环的模型,主要用于表示:同一个任务节点,重复的执行多次。
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 324.75pt; HEIGHT: 72.75pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.jpg" o:title="3-2"></v:imagedata></v:shape>
图(3-2)<o:p></o:p>
<o:p></o:p>
如图中所显示。“模式2”比“模式1”多了一个鉴别节点(Discriminator Node)。这两种模式,在现实中应用的都较为广泛,其中“模式1”更多的偏向人为的选择,也就是说,在任务执行后,由人为的决定是否继续重复的执行这次任务;而“模式2”则更多的倾向于一个既定的规则,按照原有的规则,决定是否重复执行。
<o:p></o:p>
3.2 发散运转模型
<o:p></o:p>
并行,就涉及到流程的分支概念。就是说在流程运行过程中,因为不同的条件或情况,或者处理的业务需要多部门(多任务)分开处理,而产生了流程分支。如下图所示
<v:shape type="#_x0000_t75" id="_x0000_i1027" style="WIDTH: 4in; HEIGHT: 93pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.jpg" o:title="3-3"></v:imagedata></v:shape>
图(3-3)<o:p></o:p>
<o:p></o:p>
流程在执行完任务A后,因为需要,产生了两个并发执行的分支(A——B和A——C)。这两个分支之间是对等的,也是并行执行的。
有关上面的流程图,可能在以后的一些文章/文档中,大家会看到下面类似的图形
<v:shape type="#_x0000_t75" id="_x0000_i1028" style="WIDTH: 312.75pt; HEIGHT: 92.25pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.jpg" o:title="3-4"></v:imagedata></v:shape>
图(3-4)<o:p></o:p>
<o:p></o:p>
虽然比上图多了一个And选择器,但实际上,两图,表示的是同一个含义或模型。所以大家在应用或读书的时候,可以长个心眼哦,自己学会实质性的分析。
<o:p></o:p>
<o:p></o:p>
当一个任务处理完后,发现其后面可允许走多个分支流程,但只允许选择其中某一个分支运行。这个选择是人为决策的,预先没有设点选择的规则。
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1029" style="WIDTH: 308.25pt; HEIGHT: 88.5pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.jpg" o:title="3-5"></v:imagedata></v:shape>
图(3-5)<o:p></o:p>
<o:p></o:p>
这同前面的“独占式选择”很相似,唯一不同点,就是多了一个鉴别器(Discriminator)。当任务达到这个鉴别器的时候,鉴别器会根据当前流程所处的状态,对比预先设定的一些选择规则,自动判别接下来流程的流向,也就是自动根据条件,选择一个满足条件的分支运行。
<v:shape type="#_x0000_t75" id="_x0000_i1030" style="WIDTH: 281.25pt; HEIGHT: 80.25pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.jpg" o:title="3-6"></v:imagedata></v:shape>
图(3-6)<o:p></o:p>
<o:p></o:p>
鉴别器模式(有的可能叫选择器等等名字,表达的意思基本相同),在现实应用中较为广泛。比如在订单申请流程中,设定一个依据数额判别流向的鉴别器,如果数额大于等于5000就走分支流程A,如果数额小于5000就走分支流程B。
<o:p></o:p>
抄送模型,本身不是一个标准的工作流运转模型,但是在现实应用中,比比皆是。
它表达的意思是(请参考下图),存在主流程(A——C),在一个任务(A)执行完毕后,会继续执行主流程上下一个预定任务(C),但是同时也会激活另一任务(B)(或另外的流程)的执行,但是任务B以及任务B的后续流程,不会对主流程运转造成影响。
请注意图中的 A——B流程沿线,用的是灰色虚线表示,而且任务B也同样采用灰色表示。
<v:shape type="#_x0000_t75" id="_x0000_i1031" style="WIDTH: 311.25pt; HEIGHT: 93pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.jpg" o:title="3-7"></v:imagedata></v:shape>
图(3-7)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
来个举个电子办公系统中,经常遇到得例子说明一下:比如一个发文,在交司局会签的时候,可能会抄送一份给另外的司局备案,这个过程就或额外的激活一个不影响主会签流程的“抄送任务”,比如图中Task B。
<o:p></o:p>
说到这里,大家可再回过头参看一下并行模型(3.2.1节)。发散和并行最大的区别就是,各个分支(branch)的流程状态(或流程数据):
在并行模型中,分支状态(A-B)与分支状态(A-C)是大多数情况下是不相等的。由任务A执行后的状态进行一定条件下的“拆分”,形成了两个分支(或多个分支)流程。这多个分支流程,在最终需要重新聚合成一个主流程,以确保流程信息的完整性(当然,实际运行中,可能存在因为超时等特定原因而最终抛弃某个子流程)。
而在发散模型中,分支状态(A-B)与分支状态(A-C)是绝对相等的。因发散而产生的多个分支流程,在最终未必聚合(可能因为种种原因,聚合的时候会抛弃一个和多个分支流程)。
这里面说到了“聚合”概念,在后续的介绍上,将加以详细叙述
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1032" style="WIDTH: 350.25pt; HEIGHT: 126pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image013.jpg" o:title="3-8"></v:imagedata></v:shape>
图(3-8)<o:p></o:p>
<o:p></o:p>
3.3 聚合运转模型
下面我们就将进入聚合模型的介绍。因为有了“发散”,在一个流程的后续运转中,才会出现“聚合”这个问题。所以在后续讨论聚合模型的时候,大多情况下都会结合上面的发散运转模型。
同步聚合(synchronize merge)
由必要说明一下,同步聚合,可不是“同时聚合”噢。
<v:shape type="#_x0000_t75" id="_x0000_i1033" style="WIDTH: 405pt; HEIGHT: 138pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image015.jpg" o:title="3-9"></v:imagedata></v:shape>
图(3-9)<o:p></o:p>
<o:p></o:p>
虽然名为简单聚合,不过在现实应用中,其理解度和应用度,都基本上比上面的“同步聚合”要难。多分支在聚合的时候,采用类似于“先进先出”法则,哪一个分支先达到,则最先激活流程的运行。后续的分支则到此就会终止。
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1034" style="WIDTH: 320.25pt; HEIGHT: 105pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image017.jpg" o:title="3-10"></v:imagedata></v:shape>
图(3-10)<o:p></o:p>
<o:p></o:p>
多重聚合,与上面的简单聚合有些相似。但是比起Simple Merge可就复杂多了。到目前为止,在现实中,我还没有碰到过这样的流程实施。
多分支在聚合的时候,采用类似于“先进先出”法则,但是不同于简单聚合的是,任何一个分支,在到达这个聚会点的时候,均会激活后续流程的运转。
这就涉及到一个问题了,如果一个后续流程实例刚刚被激活,又一个分支到达,那么这个分支是否激活后续流程实例呢?在不同的工作流引擎中(workflow enginner)中会有不同的解决方案,有的选择立即激活,有的选择等待延迟激活。就这一点来说,不是本文的讨论主题,有兴趣的朋友,可以在自己的引擎中实现不同的方式。
<v:shape type="#_x0000_t75" id="_x0000_i1035" style="WIDTH: 311.25pt; HEIGHT: 102pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image019.jpg" o:title="3-11"></v:imagedata></v:shape>
图(3-11)<o:p></o:p>
<o:p></o:p>
这个是较为容易理解的,显示应用中也常常碰到,但是在应用的实施难度较大,因为一般与其配合的都会存在一个“规则引擎”,来定义/处理聚合规则
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1036" style="WIDTH: 320.25pt; HEIGHT: 105pt"><v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image021.jpg" o:title="3-12"></v:imagedata></v:shape>
图(3-12)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
---------------------------
作者:胡长城 (银狐999 , james999)
Email:james-fly@vip.sina.com
分享到:
相关推荐
创新思维训练第三四讲——发散思维.ppt
教师资格考试、教师招聘考试资料——发散思维训练的方法.pdf
srukf 代码,经试验可用,可以解决ukf在模型不匹配时出现的发散或者不稳定等问题
元计算技术人员为大家介绍CFD计算过程发散诸多原因分析
本文整理分析了Hudson一阶模型、Hudson二阶模型、Cheng模型、Liu模型、Schoenberg线性滑动模型等五种裂隙等效模型的弹性参数表达式。利用数值模拟的方法,分析了裂隙的纵横波速度、弹性参数随裂隙密度、方位角和孔隙...
保证设备独立性与数据一致性为特点,提出一种基于构件适应与协同的智能家居平台逻辑模型,对平台及各构件进行形式化描述与建模,并结合平台功能需求对模型性质进行分析与验证。实验表明,在本模型下平台构件的适应与协同...
分析经典射流理论和相关文献,给出了在汇聚点坐标系中金属Cu对碰形成射流的汇聚射流区、无射流激波封锁区、无射流强度封锁区和形成发散射流区域。对金属超声速射流形成的发散性问题进行了理论分析,诠释了Walker基于...
统计工具箱部包括概率分布、假设检验、方差分析、回归分析、非参数检验、判别分析、聚类分析、主成分分析、试验设计、统计过程控制、常用统计图形、多元方差分析、决策树、因子分析、隐马尔可夫模型和多维尺度分析等...
App Inventor编程对初中学生发散思维的培养——以开发“打地鼠”游戏为例.pdf
该模型利用MATLAB软件中的模块库,建立了基于模型预测控制的三相逆变器在电力系统应用中的系统仿真模型,通过 Matlab仿真软件搭建仿真模型,运行仿真,并对基于模型预测控制的三相逆变器的仿真结果进行了分析。...
本人搭建里无刷直流电机模型,对其进行了仿真,电动势波形是发散的,逐步查看各模块后,发现控制系统对本体不起控制作用,这是为什么?就是说整个系统仿真波形,和单独的电机本体仿真波形是一样的,转速电流闭环双...
我们研究任意维度的非局部非线性sigma模型,关注标度不变极限,在该极限中标量场自然具有标度维度0,因此自由传播子是对数的。 经典动作是目标歧管上各点之间的弧长的平方的双局部积分。 通过在动作中引入一个附加的...
将我们的精确处理方法与保形场理论的进一步结果相结合,我们发现了(非)桥数的(归一化)方差的令人惊讶的行为,表明它在低于4cos2(π/ 3)值的两个维度上发散。 簇耦合q的= 0.2315891⋯。 最后,我们表明,从...
最近,已经建立了关于爱因斯坦-麦克斯韦-标量(EMS)模型中孤子解存在性的不成立定理(Herdeiro和Oliveira在类量子引力36(10):105015,2019中)。 在这里,我们讨论如何通过实数,规范的标量场和电磁场之间的特定...
本文提出了一种具有单个有效视点约束的球面相机模型,用于发散相机集群。我们将球面投影定义为使用中心投影在球面上表示空间点的方法。因此,将发散的相机群集视为解决计算机视觉问题的单个模型是合理的。为了构建...
针对综合集成研讨厅中发散型研讨具有连续性、模糊性、复杂性等特点, 提出了一种基于云模型与证据理论的共识分析方法. 该方法利用云模型根据研讨信息间语义关系求取每条...
φ4n矢量模型具有立方各向异性的重归一化组函数的六环展开是在4-ε维的最小减法(MS)方案内计算的。 给出了立方定点坐标的ε... 特别是,我们对nc的分析加强了现有论点,以支持在物理情况n = 3时三次定点的稳定性。
本文介绍了卡尔曼滤波器发散的原理以及克服发散的方法