`
snowfox2008
  • 浏览: 127509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于事件驱动的有限状态机实现工作流引擎的核心调度算法

阅读更多

 

有限状态机(FSM)又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。

 

状态存储关于过去的信息,就是说它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作:

进入动作(Entry action

         在进入状态时进行

退出动作

         在退出状态时进行

输入动作

         依赖于当前状态和输入条件进行

转移动作

         在进行特定转移时进行

 

有限状态机是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。在Gof23种设计模式里的state模式是一种面向对象的状态机思想,可以适应非常复杂的状态管理。

现在,在硬件领域,FSM被用于电路设计,而在软件领域被普遍用于搜索引擎的分词、编译器实现、游戏开发和工作流引擎实现。游戏开发中,通常用FSM实现NPC控制。在工作流引擎实现中,通常用FSM来实现对于流程实例、活动实例、转移实例、工作项实例的状态迁移。FSM的实现方式有多种,在工作流引擎中我们一般采用面向对象的方式来实现FSM

图一、有限状态机逻辑图

在上图中,我们可以看出,FSM下一个状态和输出是输入和当前状态的函数,也就是说,输入和条件触发当前状态变迁为下一个状态,而下一个状态的实现会产生输出结果。

图二、工作流引擎内部对象关系图

工作流引擎中工作项状态转移表:

图三、 工作项状态转移表

工作流引擎中工作项状态转移图:

图四、工作项状态转移图

图三以状态转移表的形式描述了在工作流引擎中,单个工作项(任务实例)的有限的多个状态、这些状态之间的转移、转移条件及触发转移的事件(执行动作)。图四以状态转移图的形式描述了在工作流引擎内部一个具有2个节点的串行流程的工作项(任务实例)的状态转移情况:

加载并初始化第一个活动节点的任务实例形成待签à签收第一个任务实例形成待办à结束第一个任务实例à初始化第二个任务实例形成待签à签收第二个任务实例形成待办à结束第二个任务实例à流程实例结束

从图四可以看出工作流引擎内部的核心引擎的调度算法都是基于事件驱动的有限状态机来实现的,例如,签收动作(sign in)会触发待签状态(to sign in)到待办状态(to do)的变迁。通过图一我们设计出了工作流实例对象,通过图三、图四我们给出了工作流引擎内部工作流实例对象的基于事件驱动的有限状态机的转移表及转移图。下面给出工作项实例的伪代码实现:

public class Workitem{	
    public void initialize(){
	//todo: 
    }

    public void signin(String userId, String userName){
    		//todo:
    		setState("todo");
    		setSignInTime(currentTime);
    }
    
    public void take(String userId,String userName){
    
    }
    
    public void complete(){
    		setState("completed");
        setCompleted(currentTime);
        
        //compute the post activity instances by route pattern
        
        //signal the transition of current activity instance	
        
        //to initialize the post activity instance
        
        //to initialize the workitem instance of the post activity instance
    }

    public void delegate(String userId, String userName){
    
    }

    public void cancelDelegate(){
    
    }

    public void cancelCompete(){
    
    }

    public void suspend(){
    
    }

    public void resumeSuspend(){
    
    }

    public void terminate(){
    
    }

    public void callback(){
    
    }

    public void backword(){
    
    }

}
 当然,以上只是给出了工作流引擎内部工作项的状态变迁描述及实现,在工作流引擎内部,还有活动实例,流程实例,转移实例的状态变迁,还有21种基本流转模式的实现等。但是我们掌握了有限状态机的理论及实现,就解决了工作流引擎内部最为核心的所有工作流实例的状态变迁问题。在下一篇文章中,我会继续描述怎样实现工作流引擎的21种基本的流转模式。

  • 大小: 4.9 KB
  • 大小: 54 KB
  • 大小: 32.7 KB
  • 大小: 55.5 KB
5
4
分享到:
评论
3 楼 itstarting 2009-07-31  
我也在关注这个话题:
http://www.iteye.com/topic/436329

大家可以先看看jFSM的实现,我主要的考虑和顾虑:
1、FSM的模型能否满足需求,尤其是自由流程(楼上说的对,模式很多了,有谁论证过是否适用?);
2、FSM的使用范围:工作流有很多的状态,都适用还是?
2 楼 nychen2000 2009-06-28  
今天再拜读大作。顺便提一个我一直没有捉摸透的疑问。
我感觉FSM只是描述了某个节点状态转移规则,从一个节点complete到下一个节点的initialize是一个很复杂的问题,尤其在下一个节点有汇聚的情况下。FSM如何解决这个问题呢?
1 楼 huidian 2009-06-04  
现在已经是44种流转模式了。
期待作者的实现描述!

相关推荐

    工作流引擎核心调度算法

    工作流引擎核心调度算法是流程自动化中的关键技术,它负责协调并执行一系列相互关联的任务,以完成一个完整的工作流程。在企业信息化系统中,工作流引擎扮演着至关重要的角色,能够提高工作效率,规范业务流程,并...

    工作流引擎核心调度算法.docx

    1. OBE(Open Business Engine)的工作流引擎调度机制可能基于事件驱动或者状态机模型,通过监听特定事件来触发流程的下一步动作。这种引擎可能会使用一种预定义的任务队列和优先级机制来决定哪个任务应该被调度执行...

    fox999_工作流引擎核心调度算法和PetriNet.pdf

    - **OBE**:OBE(Open Business Environment)工作流引擎采用基于状态机的调度机制,适合处理简单线性流程。 - **Shark**:Shark引擎通过事件驱动的方式实现任务调度,适用于需要快速响应外部事件的工作流程。 ...

    进程调度模拟设计——最高响应比优先调度算法

    目标在于深入理解并实践该调度算法的工作原理,观察不同进程请求在算法下的执行顺序和效率,以及评估算法在处理各种进程时的公平性和性能表现。 #### 最高响应比优先调度算法详解 在HRRN算法中,每个进程的响应比...

    [原创]JWFD工作流引擎设计原理(JWFD v0.94 版本)

    3. **数据结构**:工作流引擎的核心数据结构可能包括任务节点、工作流定义、状态机模型等。任务节点表示流程中的每一步操作,工作流定义则定义了这些节点之间的关系和执行顺序,状态机模型用于跟踪和控制流程的状态...

    基于JMX技术的分布式工作流系统的研究与实现.pdf

    系统体系结构是分布式工作流系统的核心,一个好的体系结构可以有效解决集中式工作流系统的性能瓶颈问题,比如核心引擎过载导致的系统瘫痪。分布式工作流系统体系结构通常由一组分布在不同地域的服务节点上的流程引擎...

    js 工作流,审批流

    - 基于状态机理论,通过状态变迁来驱动工作流的执行。 4. **任务分配与调度**: - JavaScript可以通过事件驱动或者定时器实现任务的触发和分配。 - 可以结合角色权限管理,确保任务只被合适的人员处理。 5. **...

    4k_8kflash.zip_AVR 状态机调度器

    3. **事件处理**:事件驱动是状态机的核心,它们触发状态转换。事件可以是硬件中断、定时器事件、用户输入或其他软件触发的信号。 4. **内存优化**:由于AVR的Flash内存限制(4K至8K),调度器需要高效地使用内存。...

    模拟实现进程调度算法.doc

    在操作系统中,进程调度算法是处理机管理的核心内容。本文档旨在通过模拟实现进程调度算法,体会操作系统的进程调度方法,并加深对进程控制块、进程队列、进程调度算法、进程切换的理解。 一、实验名称:模拟实现...

    JFlow工作流引擎 v2020-源码.zip

    2. 任务调度算法:研究任务调度器如何根据流程状态选择合适的任务执行者,这可能涉及到优先级队列、状态机等数据结构和算法。 3. 数据持久化策略:分析JFlow如何使用数据库或其他持久化方式保存流程实例,如何优化...

    设计实现Tomasulo调度算法.doc

    ### 设计实现Tomasulo调度算法 #### 实验要求与目标 本次实验的主要目标是设计并实现Tomasulo算法,具体来说,需要实现以下几点: 1. **展示指令执行过程中的数据流向**:通过可视化或其他直观的方式展示指令执行...

    实验:用vb实现的cpu调度

    3. **实现调度算法**:编写不同调度算法的函数。 4. **模拟CPU执行**:模拟时间推进,每次调度一个进程并更新其状态。 5. **记录和分析性能**:收集各种调度策略下的等待时间、周转时间和CPU利用率等性能指标。 6. *...

    处理机调度 cpu调度

    10. 实验报告:在"处理机调度 cpu调度 实验报告"中,可能涉及对上述理论知识的实际验证,包括模拟不同调度算法的运行情况,分析各种算法在不同场景下的性能表现,以及通过源代码(如exp2.cpp)实现调度算法的过程。...

    非抢占式调度算法的实现(非抢占式、不可剥夺式)

    这个系统通过消息进程(MP_xxx更改为OS_xxx)来驱动任务执行,有效地管理了有限的8位机资源,实现了任务间的协同工作。虽然不是完整的实时操作系统,但这种设计提供了基本的多任务处理能力,对于简化管理和维护复杂...

    移动云计算环境下多工作流任务调度的联合优化方法.pdf

    在传统移动云计算环境下,任务调度往往采用随机算法,这种方法虽然简单易实现,但往往由于缺乏对系统整体状态的考虑,而导致任务分配的不合理,进而造成资源使用不均匀,尤其是CPU负载严重,而动态电压调节技术是一...

    ilog-elixir工作流源代码

    4. **工作流引擎**:ilog-elixir的核心部分是其工作流引擎,它负责解析流程定义,调度任务,处理工作流状态转换。这部分源代码可能会包含工作流实例的创建、状态变迁、事件处理等功能。 5. **流程定义**:源代码中...

    基于STM32F103的SVPWM算法实现.zip

    这个基于STM32F103的SVPWM算法实现可能包含详细的代码示例、理论解析以及实验结果分析,对于学习和开发基于STM32的电机控制系统非常有帮助。通过深入研究,开发者可以掌握微控制器硬件平台与高级控制算法相结合的...

    xs128电机驱动

    项目可能采用了某种软件开发框架,如RTOS(实时操作系统)或事件驱动模型,以实现多任务并行处理和任务间的同步。这些框架可以帮助提高代码的可读性、可维护性和系统的响应速度。 总结,xs128电机驱动是一个综合性...

    基于DSP/BIOS的设备驱动程序开发

    设计中断管理和状态机,以高效响应硬件事件。 4. **应用驱动设计**:定义应用编程接口(API),如播放、暂停、停止等,供上层应用程序调用。 5. **测试与优化**:进行系统级测试,确保驱动的稳定性和性能;根据...

Global site tag (gtag.js) - Google Analytics