<!----><o:p></o:p>
流程模型分析(4)<o:p></o:p>
——组合嵌套模型
<o:p></o:p>
<o:p></o:p>
一直到现在,所说的模型,都是定位在“任务之间的关系”。不论前面的发散运转模型,还是聚合运转模型,都只是流程内部的任务关系,而不涉及到流程与流程之间的关系。<o:p></o:p>
请参看下图,虽然任务很复杂,但是所有的任务都限定在同一个流程中,而且为了巩固前面的一些运转模型概念,我特意在里面包含了并行,发散,自循环,鉴别聚合,同步聚合等模型。<o:p></o:p>
<!----><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: 384pt; HEIGHT: 145.5pt"></v:shape><o:p></o:p>
图(4-1)<o:p></o:p>
<o:p></o:p>
让我们再来看看下面的流程,看起来比上面的流程简单,其实不是。仔细的看,其实这里面有两个流程在运行,一个主流程内嵌一个子流程。<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 396pt; HEIGHT: 96pt"></v:shape>
图(4-2)<o:p></o:p>
<o:p></o:p>
接下来,就来看看流程与流程之间会存在什么样的关系,存在什么可能的模型。<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
内嵌模型刚刚已经提到了,就是在一个主流程中,内嵌了一个或多个子流程。每个子流程自身可能是可独立运转的;也有可能是主流程的辅助性子流程,不可独立运行。<o:p></o:p>
<o:p></o:p>
请参考下图,在主流程运行到“Router”位置的时候,会激活一个子流程的运行;在子流程运行完后,会重新运行到主流程的“Router”位置,继续主流程的运行。<o:p></o:p>
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1027" style="WIDTH: 342pt; HEIGHT: 103.5pt"></v:shape><o:p></o:p>
图(4-3)<o:p></o:p>
<o:p></o:p>
在这种方式下,当子流程运行的时候,主流程会暂停,等待子流程的完结。<o:p></o:p>
<o:p></o:p>
比较下面的图与4.1.1节的图,就会发现很大的不同。
与“主流程”相同的是,当主流程运行到“Router”位置的时候,会激活一个子流程的运行。但是,激活子流程后,主流程并没有停止,而是基于按照预定的流程方向运行;同时,激活后的子流程也同样处于软转状态。<o:p></o:p>
说到这里,估计很多让都会询问,那么子流程的信息什么时候返回呢?虽然在下图中,表示为子流程的信息返回到主流程的“任务A3”。但是,依然涉及到很多问题,比如:什么时候聚合,怎么聚合的问题了;而且主流程和子流程的运行时间未必搭配恰当,有可能存在主流程首先运行到Task A3点,而这时候子流程还没有运行结束情况,反之亦然。
这种情况,大多数采用“同步聚合”的方式:如果有一方未到达的情况下,另一方会等待。当然,这其中可能涉及到等待超时等不良因素,这时候主流程时选择继续等待,还是发催办消息,还是继续运行,就是工作流引擎的设计问题了。
<v:shape type="#_x0000_t75" id="_x0000_i1028" style="WIDTH: 386.25pt; HEIGHT: 127.5pt"></v:shape><o:p></o:p>
图(4-4)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
与内嵌模型不同的地方,就是外嵌的子流程,不返回主流程。在主流程激活子流程后,主流程继续运行,且不关心子流程的运行状态或运行结果。<o:p></o:p>
参考下图,你会发现其与内嵌模型中的“主流程也运行方式”非常的相似,区别就是,子流程最终没有返回到主流程。<o:p></o:p>
<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1029" style="WIDTH: 368.25pt; HEIGHT: 121.5pt"></v:shape><o:p></o:p>
图(4-5)<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
---------------------------
作者:胡长城 (银狐999 , james999)
Email:james-fly@vip.sina.com
分享到:
相关推荐
文章提出了一种新的RBAC嵌套模型,该模型针对工作流的特点进行了优化。这种模型不仅包含了RBAC的基本元素,还特别强调了角色继承性的作用。通过对角色继承性的详细讨论,可以更好地理解如何在复杂的工作流环境中实现...
在本课件中,我们将深入探讨工作流的基本概念,并重点介绍一个开源的工作流引擎——jBPM。 首先,让我们理解什么是“工作流”。工作流可以被定义为一组相互关联的任务,这些任务按照特定的顺序执行,以完成一个业务...
在"编译原理——词法分析器"这个主题中,我们可以深入探讨词法分析的算法、正则表达式在词法分析中的应用、如何处理嵌套结构(如括号匹配)以及如何优化词法分析器的性能。同时,`cifafenxiqi`这个文件名可能是词法...
《jBPM4工作流应用开发指南》是针对企业级业务流程管理(Business Process Management,简称BPM)的一款开源框架——jBPM4的详细教程。jBPM4是一款强大的工作流引擎,它允许开发者设计、执行、管理和监控业务流程,...
为了模拟该海域,采用了DHI的三维模型——MIKE3,通过嵌套模型的方式进行,并对模拟区域的网格尺寸进行了细致的划分。 此外,对于模型结果的验证和优化,需要使用设计时段内的数据来执行,设计时段是根据监测程序...
在当今数据分析领域中,主题模型(Topic Models)是处理文本数据的重要工具,它可以揭示大量文档集合中的隐含模式。Pachinko Allocation Model(PAM)是主题模型中的一种,它在现有的模型基础上提出了改进,尤其在...
**编译原理——CMM视角下的词法分析** 在计算机科学领域,编译器是将高级编程语言转换为机器可理解的低级语言的关键工具。编译原理是研究这一过程的理论基础,其中词法分析是编译器设计的第一步。CMM(Concrete ...
词法分析器的工作基于字符流,按照预定义的规则——通常称为词法规则或正则表达式——来识别有意义的单元。 编译原理是一门深入研究编程语言如何被转换为计算机可理解形式的学科。这包括词法分析、语法分析、语义...
开发者可以定义、提交和监控工作流实例,甚至可以在工作流中嵌套其他工作流,实现复杂的数据处理流程。 6. **日志和调试**:dxpy库支持日志记录和调试,帮助开发者追踪代码在DNAstack环境中的运行状态,从而更有效...
词法分析器,也称为扫描器或词法分析器,是编译器设计中的关键组件,负责将源代码转换为可处理的结构化单元——词法单元或标记(tokens)。在编程语言处理过程中,词法分析是第一步,它在解析器之前运行,为后续的...
- **数据库简史**:数据库技术的发展可以追溯到1960年代,随着计算机技术的进步,从最初的层次模型和网状模型发展到了现在广泛使用的基于关系模型的数据库系统。 - **设计数据库的结构**:包括定义表、字段及其数据...
4. **编程模型**:在编写代码时,通常使用STM32的HAL库或LL库,这些库提供了易于使用的API,简化了底层硬件操作。例如,`HAL_GPIO_WritePin()`函数可以用来设置GPIO引脚的电平,`HAL_TIM_Base_Start_IT()`可以启动...
3. **状态机**:词法分析器经常用有限状态自动机(FSA)模型来实现,它根据输入字符流在不同状态间转换,从而识别出词法单元。 4. **缓冲区管理**:在处理源代码时,词法分析器需要维护一个输入缓冲区,以便一次...
《编译原理课设报告——基于算符优先文法分析器的设计与实现》 在计算机科学领域,编译原理是研究编程语言如何被转换为计算机可执行代码的学科。本报告将详细介绍一个基于算符优先文法的C++编译原理课程设计项目,...
本篇学习笔记将深入探讨Angular2的路由器模型及其工作流程。 首先,我们要理解Angular2的组件化思想。在Angular2中,应用是由一系列组件构成的树状结构,组件可以是通用的,如list或table,也可以是特定业务场景下...