使用传统的状态机定义,状态机记录可以同时处于多个状态吗?例如,如果我有User
模型,那么用户可以同时处于subscriber
和promotional_period
状态吗?
注意,我不是在问这样做是否有意义,我的问题是 - 是否可以使用状态机。
答案 0 :(得分:23)
如果您假设finite state machines(FSM)称为deterministic finite automata(FSA),只能有一个活动状态,那么说“不”的所有答案都是正确的在任何给定的时间。
然而,这不是唯一的FSM类型,并且没有充分的理由在所有情况下都限制自己使用这种类型的机制。还有nondeterministic finite automata(NFA),可以同时处于任意数量的状态。
这不仅仅是学术性的,甚至不是解析(正如维基百科链接可能暗示的那样):NFA实际上非常简单且非常有用,并且在硬件和软件实现中都在实践中使用。
基本上,要设计NFA,你就像DFA一样,但不是使用“当前状态”并使用输入来计算“下一个状态”,而是拥有“当前状态集”并使用用于计算“下一状态集”的输入。在硬件中(例如,用VHDL实现的FPGA),这可以在字面上同时完成。在(单线程)软件中,通常只需迭代机器每个“步骤”中的当前状态即可完成。
答案 1 :(得分:4)
没有。状态机一次只有一个状态。
组合状态可以使用其他状态完成,例如subscriber_and_promotional_period
。这是通常的做法。
答案 2 :(得分:3)
维基百科再过一天:
“有限状态机(FSM)或有限状态自动机(复数:自动机),或简称为状态机,是用于设计计算机程序和时序逻辑电路的计算的数学模型。它被认为是一个抽象机器,可以处于有限数量的状态之一。机器一次只处于一种状态;它在任何给定时间处于的状态称为当前状态。“< / p>
所以,没有。
答案 3 :(得分:0)
Petri nets是状态机的概括,允许多个同时发生的状态&#39;。