EOS工作流引擎工作原理(四)

<!----><!----><!----> <!---->

10.  一种理论上的引擎原理

  Petri Net 是离散并行系统的数学表示,它的数学表述我搞不明白,只能明白他的表面上的一些东西。它不是为工作流而产生的,但如果能把Petri NetXPDL 结合起来去构造一个引擎不一定是符合实际需求的,但我相信它一定是很有前景的。也是很具有竞争力的。
Petri Net 中主要有四个元素:
1. Place

Place
是一种状态,譬如马路上的红绿灯,他的Place 可以是红灯,绿灯。
2. Transition
Transition
是从一个状态转变到另一个状态的过程。
3. Arc
Arc
是连接PlaceTransition 的一个有向弧,可以从Transition 指向Place ,也可以从Place 指向Transition ,但不能从Place 指向Place 或从Transition 指向Transition ,中间一定要有个状态变迁的过程。
4. Token
Token
是一个物件,他可以代表任何东西,当PlaceTransition 拥有足够的Token 时才可以从一种状态边成另一中状态。

Petri Net 的运作方式
图元定义:

 <!----><!----> <!---->

<!----><!----> <!---->

上图的enter 经过fire 会变成下面的状态:

<!----><!----> <!---->

  使enter 可以fire 必须消耗freewait 的各一个tokenenter 就可以个beforeoccupied 各一个token 。依次类推的方式推动流程的运转。

  至此我们可以给PN 网这样的过程调度算法这样的定义:如果一个变迁的每个输入库所(input place )都拥有令牌,该变迁即为被允许(enable) 。一个变迁被允许时,变迁将发生(fire) ,输入库所(input place) 的令牌被消耗,同时为输出库所(output place) 产生令牌。

  使用这种算法的工作流引擎有开源的YAWL ,还有BOSSA ,大家在茶余饭后可以研究一下。

 

 

你可能感兴趣的:(工作,.net,算法)