非确定性状态机理解
Nondeterministic State Machine understanding
我正在尝试为我的 iOS 项目构建 DSL。
为此,我计划以 State Machine
的形式构建一个 Semantic Model
。 (术语来自 Fowler 关于 DSL 的书)。
主要思想:State Machine
编码为states
和transitions
之间的集合,然后可以写一些单元测试来检查some_action
是否在[=16=上] 将系统引导至some_state2
。
问题是我的应用程序有很多后台线程,因此在给定时刻状态机中可以激活多个状态。
我读过这样的状态机 Nondeterministic finite automaton
,浏览了 wiki 页面,但这对我来说太理论化了。
这是一个示例状态机:
s8
只有收到t7
和t8
才能激活,也就是说应该"wait"。
问题:
1. 状态机中有没有类似"wait"
的东西?
2. 也许,这不是NFA,而是两个状态机?我应该关心如何命名这种语义模型吗?
3. s8
是否可以用一些后台线程来实现,它接受来自 s4
和 s7
的通知,并且只有当它们都发送通知时才被激活(这意味着该单元达到超时时测试失败,然后应该在模型中的某处提及该超时)?
在分层状态机中查看 orthogonal regions,这应该可以满足您的需求。
创建一个包含两个子区域的新状态:第一个区域包含 s1、s2、s3、s4 和一个新的最终状态(t8 的目标);第二个区域包含 s5、s6、s7 和一个新的最终状态(t7 的目标)。然后添加从新状态到 s8 的新转换。
仅当两个区域都处于最终状态时才应遍历新转换。
我正在尝试为我的 iOS 项目构建 DSL。
为此,我计划以 State Machine
的形式构建一个 Semantic Model
。 (术语来自 Fowler 关于 DSL 的书)。
主要思想:State Machine
编码为states
和transitions
之间的集合,然后可以写一些单元测试来检查some_action
是否在[=16=上] 将系统引导至some_state2
。
问题是我的应用程序有很多后台线程,因此在给定时刻状态机中可以激活多个状态。
我读过这样的状态机 Nondeterministic finite automaton
,浏览了 wiki 页面,但这对我来说太理论化了。
这是一个示例状态机:
s8
只有收到t7
和t8
才能激活,也就是说应该"wait"。
问题:
1. 状态机中有没有类似"wait"
的东西?
2. 也许,这不是NFA,而是两个状态机?我应该关心如何命名这种语义模型吗?
3. s8
是否可以用一些后台线程来实现,它接受来自 s4
和 s7
的通知,并且只有当它们都发送通知时才被激活(这意味着该单元达到超时时测试失败,然后应该在模型中的某处提及该超时)?
在分层状态机中查看 orthogonal regions,这应该可以满足您的需求。
创建一个包含两个子区域的新状态:第一个区域包含 s1、s2、s3、s4 和一个新的最终状态(t8 的目标);第二个区域包含 s5、s6、s7 和一个新的最终状态(t7 的目标)。然后添加从新状态到 s8 的新转换。
仅当两个区域都处于最终状态时才应遍历新转换。