最佳实践----状态机对多步骤异步操作建模

原创 2015年11月20日 22:41:13

在工作中,我们往往会遇到这样的问题,一个任务分为多个步骤,这几个步骤可能是连续的,也可能是可以跳转的,每个步骤都可能是异步的,

对于这样的问题,有没有一个通用的解决方案,或者是一个最佳实践呢,经过一些实践和推论我得出了一个最佳实践方案---》状态机。

推理如下,等待大家拍砖指点。

问题

首先将我们要讨论的问题进行简单建模,以四个子流程的异步任务为例, 核心处理流程如上图所示,4个需求:

1. 四个子流程,顺序执行。

2. 其中的每个步骤都可能是异步的。

3. 每个步骤都可能出错,出错之后跳到错误处理子流程

4. 执行的过程中如果出错,能够保存序列处理状态,下次启动之后从自动从该状态恢复。

以下就从这四个方面讨论不同实现的优劣。

问题建模

我们首先将抽离问题模型:一个任务T(task)S1S2S3S4(step)组成,如何对问题建模?


以下分步骤提出问题并以代码呈现的方式解决问题。

 

第一步满足需求1: 多个步骤顺序执行,如果是同步代码,我们往往会写成如下形式。


 


第二步满足需求2,3: 每个步骤都是异步的,且可能跳转到其他步骤。

 

在这里我们定义S1S2S3S4都是异步的,且若S1S2S3有任何一步失败,都会跳转到S4.

为了便于表达, 这里我把每个步骤增加一个返回值,作为是否跳转依据, 修改后的模型代码如下(Callback<Boolean>即返回Boolean类型的异步回调):


 

 

第三步满足需求4: 保存序列处理状态,并从中恢复。

我们再提出第三个需求,S1-S4的过程中可能进行到任何一个步骤系统退出,需要下一次重启之后继续从上一次的任务执行状态中恢复。

 

原来的异步代码依赖语言级闭包运行,无法从中间状态开始(比如越过S1,从S2->S4),但如果我们转换思想,将语言级的闭包变成自定义的局部上下文(状态机),一切迎刃而解,实现方案如下:

 

如上所述,当再遇到此类问题时,可首先套用该方案实施。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

链表&状态机与多线程

《朱老师物联网大讲堂》学习笔记 学习地址:www.zhulaoshi.org (1). 链表的引入, 数组是最简单的数据结构, 还有很多种数据结构,用于解决不同的问题, 数组,缺陷,元素类型一...

QM UML状态机建模实例之移植 cortex-m0

在上一期“Blinky for cortex-m0”中我们介绍了如何在QM中建立一个工程和生成代码,如何使生成的代码在我们的工程师运行起来,为此这一期要介绍如何将QP-NANO(qpn5.4.2)移植...

UML行为建模图———状态机图

状态机图 状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。 如下示例, 下列的状态机图显示了门在它的整个生命周期里如何运作。 门可以处于以下...

QM UML状态机建模实例之Blinky for cortex-m0

QP由QuantumLeaps公司开发异于传统顺序式系统(前后台架构即main+ISR)和传统多任务系统(操作系统)的事件驱动型状态机框架,实现了在C语言下的面向对象编程,该框架支持有限状态机FSM和...

Linux环境下构造有限状态机建模

有限自动机(Finite Automata Machine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(Finite State Machine),是一种应用非常广泛的软件设计模式...

在使用javascript-state-machine状态机调用异步钩子函数时,卡死问题及抛出异常问题

2017-03-16:更新 使用外面包裹一层async函数的方式难以抛出异常,而且很丑陋。 经过艰苦的摸索(妈蛋,新版的文档也补全),终于找到了一个抛出异常的方式。这是钩子函数中,大致思路就是代码...

状态机实践入门

转自 ouravr论坛,原文地址:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4585393&bbs_page_no=1&bbs_id=9999 ...

状态机实践入门

状态机实践入门 原文转自:http://www.cnblogs.com/pang123hui/archive/2012/02/04/2338275.html  不用怀疑,单...

[FSM]状态机实践入门——程咬金只要三斧头厉害

原帖地址:http://www.amobbs.com/thread-4585393-1-1.html 不用怀疑,单片机的万能语言就是状态机。还希望大家不要条件反射式的看到状态机就以为我要讲什么VHD...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)