前言

状态机在实际工作开发中应用非常广泛,在刚进入公司的时候,根据公司产品做流程图的时候,发现自己经常会漏了这样或那样的状态,导致整体流程会有问题,后来知道了状态机这样的东西,发现用这幅图就可以很清晰的表达整个状态的流转。

很多协议的开发都必须用到状态机;一个健壮的状态机可以让你的程序,不论发生何种突发事件都不会突然进入一个不可预知的程序分支。

本篇文章带你简单了解一下状态机


什么是状态机?

定义

状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。

先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个LED等,就有 亮 和 灭两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如LED灯的状态就是两个 亮和 灭。

状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。

举例

以物理课学的灯泡图为例,就是一个最基本的小型状态机

可以画出以下的状态机图

这里就是两个状态:①灯泡亮,②灯泡灭
如果打开开关,那么状态就会切换为 灯泡亮 。灯泡亮 状态下如果关闭开关,状态就会切换为 灯泡灭。

状态机的全称是有限状态自动机,自动两个字也是包含重要含义的。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时可以明确的运算出来的。例如对于灯泡,给定初始状态灯泡灭 ,给定输入“打开开关”,那么下一个状态时可以运算出来的。


四大概念

下面来给出状态机的四大概念。

  • State ,状态。一个状态机至少要包含两个状态。例如上面灯泡的例子,有 灯泡亮和 灯泡灭两个状态。

  • Event ,事件。事件就是执行某个操作的触发条件或者口令。对于灯泡,“打开开关”就是一个事件。

  • Action ,动作。事件发生以后要执行动作。例如事件是“打开开关”,动作是“开灯”。编程的时候,一个 Action 一般就对应一个函数。

  • Transition ,变换。也就是从一个状态变化为另一个状态。例如“开灯过程”就是一个变换。


以上就是状态机的简单介绍了,如果想进一步学习,可以参考这篇文章——>状态机详解

【通俗易懂】什么是状态机?相关推荐

  1. ospf状态机-通俗易懂的小故事

    阅读本文大概需要 5 分钟. 公众号:工程师江湖 * 故事:一个名字叫做ospf状态机的故事* 很久很久以前,有一个区域,这个区域叫做 自治系统AS,在AS内部有很多管理员,管理员来有个别名叫做IGP ...

  2. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)

    前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span(一)>,相信大家对span的本质应该非常清楚了.含着金钥匙出生的它,从小就被寄予厚望要成为.NET下编写高性能应 ...

  3. [通俗易懂]深入理解TCP协议(下):RTT、滑动窗口、拥塞处理

    转自即时通讯网:http://www.52im.net/ 前言 此文为系列文章的下篇,如果你对TCP不熟悉的话,请先看看上篇<[通俗易懂]深入理解TCP协议(上):理论基础> . 上篇中, ...

  4. [通俗易懂]深入理解TCP协议(上):理论基础

    转自即时通讯网:http://www.52im.net/ 前言 TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的 ...

  5. QT学习之状态机框架

    状态机框架 创建状态机

  6. 如何保证Qt状态机的最佳性能

    如何保证Qt状态机的最佳性能 How to ensure the best Qt state machine performance 如果您使用Qt进行应用程序开发,并且使用状态机,那么很可能您正在使 ...

  7. 用测试驱动开发状态机

    用测试驱动开发状态机 Developing state machines with test-driven development 由于状态机模型在嵌入式系统中的广泛应用,本文探讨了在测试驱动开发(T ...

  8. Java注解---通俗易懂

    本文转载于Java注解-最通俗易懂的注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解. 我个人认为,比较糟糕的技术文 ...

  9. SharePoint 工作流解决方案(一):顺序工作流和状态机工作流

    SharePoint 的工作流是基于 Workflow Foundation 的,我们就先谈谈 WF,只有对 WF 有正确的认识,才能找到 SharePoint 工作流的解决方案. Workflow ...

最新文章

  1. Hibernate flush理解
  2. option 82与DHCP中继代理
  3. postman设置测试环境
  4. CentOS7-64bit 编译 Hadoop-2.5.0,并分布式安装
  5. Morphling:云原生部署 AI ,如何把降本做到极致?
  6. 鬼才项斌,用人工智能推动教育服务创新
  7. 网址的bibtex格式
  8. 学习Java之前的一些话
  9. linux内存专题,linux内存浅析
  10. 视频封面自动播放两秒钟html,使用videojs轻松搭建一个播放器
  11. 国家气象数据中心网站
  12. Java链表入门(超详细)
  13. c语言自动画波形程序,【小程序】C语言实现简易钢琴-利用sin函数构造不同频率波形模拟各琴键发音...
  14. pyqt5 图片随窗口变化等比例缩放
  15. Python数据类型—数值型
  16. 计算机专业调研报告图片,计算机专业毕业设计论文(计算机专业调研报告范文)...
  17. 前后端交互:form表单与模板引擎
  18. PS色彩算法理解记录 1 Darken Lighten
  19. 合同索赔的内容和处理方法
  20. 项目中使用过的Soc

热门文章

  1. VC使用HTTP协议下载文件
  2. 有赞统一接入层架构演进
  3. C++ STL : 模拟实现STL中的string类
  4. JDBC连接失败java.sql.SQLException: ...ClassCastException: BigInteger cannot be cast to Long
  5. 腾讯TencentOS 十年云原生的迭代演进之路
  6. Django视图(二)
  7. LiveVideoStackCon 2018 注册通道即将关闭
  8. Navicat Premium 12安装及常用快捷键
  9. 腾讯大数据高级产品总监洪桃李:决胜未来的4大关键能力
  10. 云原生存储项目ROOK