状态机模型,你真的搞懂并用对了吗?

状态机详解(一段式、二段式、三段式) 一、有限状态机FSM(Finite State Machine) 组成元素: 输入、状态、状态转移条件、输出。 可以分为两类: Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关; Moore状态机:时序逻辑的输出只与当前状态有关。 描述方式: ① 状态转移图:设计分析时使用,工具自动翻译的代码效率不... 阅读详情
AI摘要

本文从状态机的本质出发,探讨其在工程实践中的应用。状态机分为业务和系统两类,本质是对系统行为抽象建模。工程实践中面临状态爆炸、可维护性、性能等问题。最佳实践包括遵循设计原则、采用合适实现方法和优化策略,以发挥状态机在系统设计中的价值。

关注公众号!留言:参考模板 ,
送《技术方案设计参考模板》

1 引言

状态机对于业务和技术人员并不陌生,大家在做技术方案设计时多数情况下会有对实体状态流转进行可视化建模,并通过诸如UML 状态机图的形式进行可视化。我们将从状态机的本质出发,探讨其在工程实践中的问题,并探讨相应的实践。

2 状态机的本质

状态机(State Machine)是计算机科学和软件工程中一个重要的概念,广泛应用于系统设计、业务逻辑处理、流程控制等领域。状态机通过抽象系统的行为,描述系统的状态、事件、转换和动作,帮助开发者更好地理解和设计复杂的系统。

2.1 状态机的基本概念

图片

状态机是一种抽象的形式化模型,用于描述系统在不同状态之间的转换。它由以下几个基本元素组成:

•状态(State):系统在某一时刻的特定条件或模式。

•事件(Event):触发状态转换的外部或内部动作。

•转换(Transition):从一个状态到另一个状态的过程。

•动作(Action):在状态转换过程中执行的操作。

图片

状态机可以分为两类:有限状态机(Finite State Machine, FSM,状态数量确定)和无限状态机(Infinite State Machine,状态数量不确定)业务系统建设中多数情况下我们面对的是有限状态机。

2.2 业务状态机与系统状态机

在工程实践中,状态机的应用可以分为两大类:业务状态机和系统状态机。在业务分析或产品拆解阶段,对于业务域实体的状态转换多用业务状态机表述。在工程实现阶段,实体状态由系统状态机体现。

图片

业务状态机

业务状态机主要用于描述业务对象的状态变化。例如,在电子商务系统中,订单的状态可能包括“待支付”、“已支付”、“已发货”、“已完成”等。业务状态机的设计通常需要与业务需求紧密对齐,确保系统能够准确地反映业务规则和流程。业务状态机的特点是:

•与业务逻辑紧密耦合:业务状态机的设计直接反映了业务规则,因此需要与业务需求保持高度一致。

•状态转换的复杂性:业务状态机的状态转换可能涉及多个业务规则和条件,因此转换逻辑可能较为复杂。

•可扩展性:随着业务需求的变化,业务状态机可能需要不断扩展和调整。

系统状态机

系统状态机主要用于描述系统内部的状态变化。例如,在网络通信协议中,连接的状态可能包括“未连接”、“连接中”、“已连接”、“断开连接”等。系统状态机的设计通常关注系统的内部行为和性能,确保系统能够高效地处理各种事件和状态转换。系统状态机具有以下特点:

•与系统架构紧密耦合:系统状态机的设计需要与系统架构保持一致,确保系统能够高效地处理各种状态转换。

•状态转换的简洁性:系统状态机的状态转换通常较为简洁,重点关注系统的性能和可靠性。

•稳定性:系统状态机的设计通常较为稳定,不会频繁变化。

业务状态机与系统状态机并不是完全一致,因为二者的视角不同。在技术视角看,因为引入的实现所需要的技术细节,比如采用了分布式架构设计、网络异常的考量等等,系统状态机会在基于实现进行细化和衍生。

2.3 状态机的本质

状态机的本质在于对系统行为的抽象和建模:通过状态机,开发者可以将复杂的系统行为分解为一系列的状态和转换,从而简化系统的设计和实现。状态机的核心思想是状态驱动,即系统的行为由当前状态和触发事件共同决定。

状态机的另一个重要特性是确定性: 在确定性的状态机中,给定当前状态和触发事件,系统的下一个状态和执行的动总是确定的。这种确定性使得状态机在设计和调试过程中具有较高的可预测性。

3 工程实践中的问题

尽管状态机在理论上具有简洁性和清晰性,但在实际工程实践中,状态机的设计和实现往往面临诸多挑战:

1. 状态爆炸

状态机状态数量随着系统复杂度的增加而急剧增加,复杂的业务系统中,业务对象的状态可能涉及多个维度和条件。状态爆炸会导致状态机的设计和实现变得复杂,难以维护和扩展。抽象、分层和结构化是解决复杂性的有效方式。

2. 可维护性

状态机的可维护性是一个重要的问题。随着业务需求的变化,状态机可能需要不断调整和扩展。如果状态机的设计不够灵活,维护和扩展将变得困难。

3. 性能

状态机的性能也是一个需要考虑的问题。在一些高性能系统中,状态机的实现可能成为性能瓶颈,状态机的状态转换需要快速响应,否则可能导致系统性能下降。

4. 删除状态的处理

在状态机的设计中,删除状态的处理是一个值得探讨的问题。删除状态是否应该显式地表示成一个节点,还是直接关联到状态结束?这个问题需要根据具体的业务需求来决定。显式地表示删除状态可以增加状态机的清晰性和可维护性,但也可能导致状态数量的增加。直接关联到状态结束可以简化状态机的设计,但可能降低状态机的可读性和可维护性。

4 最佳实践

1. 设计原则

•单一职责原则:每个状态机应该只负责一个特定的功能或业务逻辑,避免状态机过于复杂。

•开闭原则:状态机的设计应该对扩展开放,对修改关闭。确保状态机在扩展时不需要修改现有的状态和转换逻辑。

•清晰性原则:状态机的设计应该清晰易懂,确保开发者和业务人员能够理解状态机的行为和规则。

2. 状态机的实现

•状态模式:在面向对象编程中,状态模式是一种常用的实现状态机的方法。通过将每个状态封装成一个对象,可以简化状态转换逻辑的实现。

•事件驱动架构:在事件驱动架构中,状态机可以通过事件触发状态转换。这种架构可以提高系统的灵活性和可扩展性。

•状态机的可视化:通过可视化工具和统一模型进行可视化表述

3. 状态机的优化

•减少状态数量:通过合并相似的状态或引入复合状态,可以减少状态数量,避免状态爆炸。

•异步处理:在高性能系统中,可以通过异步处理状态转换,提高系统的响应速度和吞吐量。

•状态机的分层设计:在复杂的系统中,可以通过分层设计状态机,将系统状态机和业务状态机分离,降低系统的复杂度。

5 结语

状态机时一种非常有效的抽象的系统行为的分析建模工具,在工程实践中具有较高价值。通过对实体状态建模,有利于业务与技术对领域有一致性理解,并能够有效指导后续的工程实现。值得注意的是,技术人员要对业务状态机和系统状态机有清晰认识,不要混为一谈。由于二者出发视角的不同,技术视角的系统状态机更加偏重于实现,业务状态机更加面向客户。

状态机(有限状态自动机 FSM)介绍以及常用状态机种类对比 状态机概念, 为什么要使用状态机 阅读详情

相关推荐

动态规划之状态机模型

状态机模型 状态机 状态机与动态规划之间的联系 状态机的本质之动态规划描述 股票买卖系列 股票买卖 股票买卖Ⅱ 一、动态规划解法 二、贪心解法 股票买卖Ⅲ 前后缀分解 股票买卖Ⅳ 股票买卖Ⅴ KMP + 状态机 设计密码 AC自动机 + 状态机 修复DNA

qq_39838607的博客 1084

一文看懂什么是状态机

状态机(State Machine)是一种数学模型,用于描述系统或程序在不同状态之间转换的行为。它由一组状态、转移条件和动作组成。提示:以下是本篇文章正文内容,下面案例可供参考状态机可以被看作是一个抽象的机器,它可以处于不同的状态,并根据输入条件执行相应的动作来改变状态。状态表示了系统或程序所处的特定情况或阶段,而转移条件决定了在何种条件下从一个状态转移到另一个状态,动作则表示在状态转移时要执行的操作。

十年饮冰,难凉热血,保持热爱,奔赴星海! 1万+

【 FPGA 】状态机的模型之Moore型状态机

上篇博文:状态机,FPGA的灵魂,说到了状态机的基础知识,讲到了状态机的组成六要素,工作四要素。 这篇博文来讲状态机的模型之Moore状态机,从标题也能看出,状态机的知识并没有结束,后面还会提到Mealy型状态机。 Moore型状态机 根据状态机的输出与其现态、输入之间的关系,可将FPGA中的状态机抽象为三种基本模型——Moore、Mealy和Mix,即摩尔型,米利型和混合型。 如果一个状...

Reborn Lee 9012

什么是状态机?用C语言实现进程5状态模型

前言 状态机在实际工作开发中应用非常广泛,一口君曾经做过很多网络协议模块,可以说很多协议的开发都必须用到状态机;一个健壮的状态机可以让你的程序,不论发生何种突发事件都不会突然进入一个不可预知的程序分支,本篇通过实现一个简单的进程5状态模型的状态机,让大家熟悉一下状态机的魅力。 定义 有限状态机(finite-state machine,缩写FSM),又叫有限状态机自动机,简称状态机。是能够表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系

一口Linux的专栏 1万+

【动态规划】状态机模型

A、抛砖引玉 - AcWing 1049. 大盗阿福 AcWing 1049. 大盗阿福 本题比较简单,主要起到一个抛砖引玉的作用。 我们可以很容易地想到转移方程:f[i]=max(f[i−1],f[i−2]+w[i])f[i] = max(f[i - 1] ,f[i - 2]+w[i])f[i]=max(f[i−1],f[i−2]+w[i]) 我们尝试使用状态机模型解决这一类问题。 什么是状态机模型? 状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。 实际上就是我们利用一个类

繁凡さん的博客 1794

FPGA随记——状态机

三段式:有三个always block,一个时序逻辑采用同步时序的方式描述状态转移,一个采用组合逻辑的方式判断状态转移条件、描述状态转移规律,第三个模块使用同步时序的方式描述每个状态的输出。代码容易维护,时序逻辑的输出解决了两段式组合逻辑的毛刺问题,但是从资源消耗的角度上看,三段式的资源消耗多一些,且输出比另外两种会延时一个时钟周期。编码原则,binary和gray-code适用于触发器资源较少,组合电路资源丰富的情况(CPLD),对于FPGA,适用one-hot code。对于大规模设计,HDL更好;

m0_59337107的博客 2709

搞懂状态机,看这一篇就够了

详述状态机的具体功能用途,以及企业实战中可能会遇到的问题

qq_59622162的博客 7131

【 FPGA 】状态机的模型之Mealy型状态机

上篇博文讲了:Moore型状态机,这篇博文和上篇博文思路一致,如果读懂了上篇博文,这篇博文就很容易理解了。 如果一个状态机的输出是由现态和输入共同决定的,那么它就是一个Mealy型的状态机。而按照驱动输出的数字电路特性,又将Mealy型状态机细分为Mealy 1型、Mealy 2型、Mealy 3型,详细介绍如下: (1)Mealy 1型 Mealy 1型状态机的原理框图如下图1所示: ...

Reborn Lee 7042

状态机模型

摘自:什么是状态机?用C语言实现进程5状态模型 作者:一口Linux 地址:https://blog.youkuaiyun.com/daocaokafei/article/details/108922604?spm=1001.2014.3001.5502 目录前言什么是状态机?定义举例四大概念(状态、事件、动作、变换)状态机的应用进程5状态模型实现 前言 状态机在实际工作开发中应用非常广泛,在刚进入公司的时候,根据公司产品做流程图的时候,发现自己经常会漏了这样或那样的状态,导致整体流程会有问题,后来知道了状态机这样.

zhuguanlin121的博客 4185

状态机(有限状态机、并发状态机、层次状态机)

2. 可以知道状态from-to,知道是从哪个状态向哪个状态进行切换,可以进行一些前置操作,例如在游戏暂停时重新开始游戏,可以在切换前重置游戏数据。使用状态机,可以避免使用if-else/switch-case进行逻辑的条件判断,导致代码臃肿,难以维护,扩展性差。游戏状态:初始化、开始、暂停、恢复、下一波敌人、3选1技能、失败、胜利、退出游戏等。但是角色的状态,行走、攻击、跳跃等是可以并行的,例如行走并攻击,跳跃并攻击。游戏流程的状态是单一的,从初始化,开始,结束等状态都只会同时存在一个。

gamedaybyday2的博客 1888

【Verilog基础】一文搞懂有限状态机(FSM)

一文搞懂FSM状态机

悟已往之不谏 知来者之可追 4649

系统设计——状态机模型设计经验

本文主要介绍了状态机模型的设计经验,包括其定义、适用场景、建模示例、事件驱动设计以及配置数据化等内容。状态机模型通过事件驱动控制状态变化,适用于流程驱动系统、生命周期管理等场景,不适用于状态变化简单或不确定的场景。文中还提供了基于“信贷审批流程”的项目示例和事件驱动流转的Spring项目示例,最后总结了状态机模式设计的优势。

庄小焱 2275

[Verilog]徹底搞懂狀態機編寫 --- 經典三段式狀態機結構詳解

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。状态机采用VerilogHDL语言编码,建议分为三个always段完成。 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。 三段式描述方法...

元直的博客 2934

状态机模型——AcWing 1057. 股票买卖 IV

动态规划中的算法状态机模型是一种用于描述算法执行过程中状态变化的模型。它由状态、事件、动作和转移组成。状态表示算法在某个时刻所处的情况,事件是导致状态发生变化的原因,动作是在状态变化时执行的操作,转移则定义了状态之间的转换关系。

u014114223的博客 1262

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

【每天一个知识点】多视图子空间聚类(Multi-view Subspace Clustering)

本文深入解析了多视图子空间聚类技术,这是一种处理多源异构数据的先进方法。它通过融合多个数据视图(如文本、图像、网络结构)的共识与互补信息,学习统一的潜在子空间表示,从而获得比单一视图更鲁棒、准确的聚类结果。文章详细阐述了其核心思想、主流技术流派(如图融合、共同潜在子空间、张量及深度学习方法),并提供了Python实战代码与调优经验,适用于跨模态检索、生物信息学等多领域复杂数据分析。

weixin_29065015的博客 461

一文搞懂LIN节点的State Machine状态机测试

协议描述:启动进度表后,主机任务依次发送同步间隔段、同步段、受保护ID段。LIN状态机的测试重点在于如何通过合理的用例设计来实现仿真报文的注入时机精准化,这也是本文想要表达的重点,通过具体的用例执行测试也能进一步深化对于LIN状态机机制的理解。

weixin_43441058的博客 2245

AD9361 LVDS数据接口时序解析与FPGA实现

本文详细解析了AD9361 LVDS数据接口的时序特性与FPGA实现方法,重点探讨了DATA_CLK、Rx_FRAME等关键信号的时序关系及数据拼接技巧。通过Verilog代码示例和调试经验分享,帮助开发者解决跨时钟域处理、IQ数据重组等常见问题,提升射频收发系统的稳定性与性能。

weixin_29186249的博客 130

一文搞懂有限状态机FSM

1.什么是有限状态机? 有限状态机(Finite State Machine,FSM),有时候也简称状态机,它是一种数学模型,通常用来设计电脑程序或者时序电路。它被构思为一个抽象的机器,并且在某个时刻只能处于一个有限的数字代表之下。 组成元素:输入、输出、状态、状态转移条件; 描述方式:状态转移图、状态转移表、HDL描述 分类: 按照输出的产生方式,可以将状态机分为两类: Moore:时序逻辑的输...

weixin_44973391的博客 3643

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 506

Cadence 17.4 PSpice仿真555定时器输出方波

这里利用555定时器组成多谐振荡器产生1Hz的方波并用PSpice仿真其输出的方波波形。555定时器是一种广泛应用的中规模集成电路。根据其内部组成的不同,可分为双极型(555B)和CMOS型(555C)两类。两种类型的定时器各有所长。双极型定时器具有较大的驱动能力,其输出电流可达200mA,可直接驱动发光二级管、扬声器、继电器等负载。而CMOS型定时器的输入阻抗高、功耗低。

tj_nonstoper的博客 1万+
上一篇: 规避系统用例建模的常见 “陷阱” !
下一篇: 浅谈业务系统代码与应用架构-回归代码本身
系统工程实验室
博客等级 码龄10年 258粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值