Skip to main content

State Machine

·115 words·1 min
WFUing
Author
WFUing
A graduate who loves coding.
Table of Contents

Introduction
#

有限状态机 (finite-state machine, FSM) 是一种抽象机器,在任何给定时间内都可以处于有限个状态中的一个状态。FSM 可以根据某些外部输入从一种状态转换到另一种状态,从一种状态转换到另一种状态称为转换。FSM 是由其状态列表、初始状态和每个转换的条件定义的。

状态是对等待执行转换的系统状态的描述。

Example
#

下面是一个简单状态机的直观描述。 这是一个简单的开关模型。

  • 它由 “开 “和 “关 “两种状态组成。因此,这台机器在任何时刻都可以处于这两种状态中的一种。换句话说,状态之间的转换是瞬时的。flick 事件会导致机器在不同状态间转换。
  • 当机器进入 on 状态时,会产生一个副作用。一盏灯被打开。
  • 当机器退出 on 状态时,会产生另一个副作用。一盏灯被关闭。
  • 这个简单的状态机就相当于一个布尔变量,来控制某件事情的 onoff

What is state anyway?
#

程序状态是程序中所有变量及其在任意时间点上的值的集合 Wikipedia

一个程序或软件组件有五个独立变量,每个变量都可能为真或假,那么理论上它可以处于 $2^5=32$ 种状态中的任何一种。然而,程序经常会出现 invalid 状态,而在传统软件中,变量都会经过仔细检查和处理,以避免出现这些 invalid 状态。

Relationship with statecharts
#

理解状态机几乎等同于理解 statecharts。 在许多方面,statecharts是状态机的 “大哥”,旨在克服状态机的一些局限性。statecharts 本质上是一种状态机,它允许任何状态以分层的方式包含更多的状态机。这是为了克服状态机固有的一些局限性。

Abstract machine vs run-time
#

抽象机器本身(如状态机的绘制或代码)与特定抽象机器更具体的运行时执行之间必须作出重要区分。这种区别类似于类(抽象定义)和对象(具体实例化)之间的区别。同样,对于单个抽象机器来说,可能有许多执行,就像任何特定类往往有许多实例一样。

术语 “statechart”、“state machine “和 “FSM “通常既指抽象形式,也指运行时形式,尽管运行时形式有时带有限定词 “run” 或 “execution”,如 “state machine execution” 或 “statetchart run”。

abstract state machine 是一种软件组件,它定义了一组有限的状态:

  • 有一种状态被定义为 initial state。当机器开始执行时,它会自动进入这种状态。
  • 每个状态都可以定义机器进入或退出该状态时发生的操作。操作通常会产生 side effects。
  • 每个状态都能定义触发转换的 transition。
  • transition 定义了机器如何对事件做出反应,即退出一种状态并进入另一种状态。
  • transition 可以定义过渡发生时的 actions。动作通常会产生 side effects。

在运行状态机时,会执行这个抽象状态机。首先,状态机进入initial state。 然后,一旦有事件发生,就会立即传递给状态机。 当事件发生时

  • 将根据当前状态的转换对事件进行检查
  • 如果某个转场与事件相匹配,该转场就会发生
  • 由于 transition 发生,状态 exited 或 entered,并执行相关操作
  • 机器立即进入新状态,准备处理下一个事件。

Resources
#