Petri Net和状态及编程
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me
前言
公司项目(云计算)牵涉到很多异步计算,资源(磁盘,网络等)创建分配调度,都是耗时的任务。 在实现过程中,都通过异步变同步(async/await)的方式来实现业务逻辑。代码本身可读性还是挺好的,同步的逻辑,一步一步的走下去,和读常规的web service代码没有什么太大区别。
但是因为是异步的,出错处理特别复杂,有可能资源找不到了,有可能资源开始创建了,但是还没有成功,有可能资源创建失败了,还有可能网络请求失败,等等。
是否可以把各种出错都当作一种状态来处理,然后通过状态机编程来实现逻辑简化,让程序更加健壮?
下面会从状态机和Petri Net的基本概念开始。
状态机
定义
怎么理解Mealy和Moore
优点和缺点
子状态怎么管理
状态机设计模式
应用场景及限制
经典应用举例
在云计算中可以怎么用, 解决哪些类型的问题
状态机(state machine)有5个要素,分别是状态(state)、迁移(transition)、事件(event)、动作(action)、条件(guard)。
- 状态:一个系统在某一时刻所存在的稳定的工作情况,系统在整个工作周期中可能有多个状态。注意,是稳定的情况才是我们关注的状态,中间态不是我们需要关注的。
- 迁移:系统从一个状态转移到另一个状态的过程称作迁移,迁移不是自动发生的,需要外界对系统施加影响。
- 事件:某一时刻发生的对系统有意义的事情,状态机之所以发生状态迁移,就是因为出现了事件。 事件触发迁移,不同的状态下同样的事件产生不同的迁移。
- 动作:在状态机的迁移过程中,状态机会做出一些其它的行为,这些行为就是动作,动作是状态机对事件的响应。
- 条件:状态机对事件并不是有求必应的,有了事件,状态机还要满足一定的条件才能发生状态迁移。
Petri Net
定义
怎么理解Mealy和Moore
优点和缺点
应用场景及限制
经典应用举例
在云计算中可以怎么用, 解决哪些类型的问题
状态机和Petri Net差异和对比
状态机在分布式系统里的应用和实现
opensource application performance里面有一个用状态机实现分布式一致性算法paxos.