按关键词阅读:
导读:在日常开发的过程中 , 我们在查阅一些资料或者编程书籍时常常会出现一些计算机理论方面的词汇 , 比如像“状态机”这个词 。 那么“状态机”是什么意思?
一句话的基本定义状态机是有限状态自动机的简称 , 是现实事物运行规则抽象而成的一个数学模型
先来解释什么是“状态”( State ) 。 现实事物是有不同状态的 , 例如一个自动门 , 就有 open 和 closed 两种状态 。 我们通常所说的状态机是有限状态机 , 也就是被描述的事物的状态的数量是有限个 , 例如自动门的状态就是两个 open 和 closed。 状态机 , 也就是 State Machine, 不是指一台实际机器 , 而是指一个数学模型 。 一般就是指一张状态转换图 。 例如 , 根据自动门的运行规则 , 我们可以抽象出下面这么一个图 。
文章插图
自动门有两个状态 , open 和 closed, closed 状态下 , 如果读取开门信号 , 那么状态就会切换为 open。 open 状态下如果读取关门信号 , 状态就会切换为 closed。
状态机的全称是有限状态自动机 , 自动两个字也是包含重要含义的 。 给定一个状态机 , 同时给定它的当前状态以及输入 , 那么输出状态是可以明确的运算出来的 。 例如对于自动门 , 给定初始状态 closed, 给定输入“开门” , 那么下一个状态时可以运算出来的 。
文章插图
状态机的四大概念下面来给出状态机的四大概念 。
- 状态(State ):一个状态机至少要包含两个状态 。 例如上面自动门的例子 , 有 open 和 closed 两个状态 。
- Event (事件):事件就是执行某个操作的触发条件或者口令 。 对于自动门 , “按下开门按钮”就是一个事件 。
- Action (动作):事件发生以后要执行动作 。 例如事件是“按开门按钮” , 动作是“开门” 。 编程的时候 , 一个 Action 一般就对应一个函数 。
- Transition (变换) 。 也就是从一个状态变化为另一个状态 。 例如“开门过程”就是一个变换 。
状态机由一组状态组成 , 这些状态分为三类:初始状态、中间状态和最终状态 。 状态机从初始状态开始运行 , 经过一系列中间状态后 , 到达最终状态并退出 。 在一个状态机中 , 每个状态都可以接收一组特定事件 , 并根据具体的事件类型转换到另一个状态 。 当状态机转换到最终状态时 , 则退出
应用场景状态机是一个对真实世界的抽象 , 而且是逻辑严谨的数学抽象 , 所以明显非常适合用在数字领域 。 可以应用到各个层面上 , 例如硬件设计 , 编译器设计 , 以及编程实现各种具体业务逻辑的时候 。
文章插图
例子:街上的自动售货机中明显能看到状态机逻辑 。 我们做一下简化 , 假设这是一台只卖2元一瓶的汽水的售货机 , 只接受五毛和一块的硬币 。 初始状态是”未付款“ , 中间状态有”已付款5毛“ , ”已付款1块“ , ”已付款1.5块“ , ”已足额付款“ , 四个状态 。 状态切换的触发条件是”投一块硬币“和”投5毛硬币“两种 , ”到达足额付款“状态 , 还要进行余额清零和弹出汽水操作 。 所以如果画出一张完整的状态转换图 , 也会是比较复杂的一张图了 。 而实际中的售货机对应的状态机就会更加复杂了 。
编程设计中的应用在YARN中 , 如果一个对象由若干个状态以及触发这些状态发生转移的事件构成 , 它将被抽象成一个状态机 , 在YARN ResourceManager内部 , 共有4类状态机 , 分别是RMApp、RMAppAttempt、RMContainer和RMNode 。
文章插图
以RMApp为例:RMApp是ResourceManager中用于维护一个Application生命周期的数据结构 , 它的实现是RMAppImpl类 , 该类维护了一个Application状态机 , 记录了一个Application可能存在的各个状态(RMAppState)以及导致状态间转换的事件(RMAppEvent) 。 当某个RMAppEventType类型的事件发生时 , RMAppImpl会根据实际情况进行状态转移 , 同时触发一个行为(实际是一个回调函数) 。
总结状态机不是实际机器设备 , 而是一个数学模型 。 涉及四个相关概念是 State 状态、Event 事件、Action 动作 , Transition 转换 。 在一个状态机中 , 每个状态都可以接收一组特定事件 , 并根据具体的事件类型转换到另一个状态 。
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J310062020.html
标题:什么是“状态机”?