Asynchronous 具有异步转换的状态机中的状态是什么

Asynchronous 具有异步转换的状态机中的状态是什么,asynchronous,state-machine,Asynchronous,State Machine,想知道如果转换是异步的,切换和定义状态的约定是什么 例如,假设有三种状态a、b和c 这两个转换分别称为d和e 假设我们处于状态a,然后触发事件x以转换到状态b 时间线可能如下所示: a a a a a a a a a x b b b b b b b . . . . . . . . . . . . . . . . . . . . . . . . . . . d complete --^

想知道如果转换是异步的,切换和定义状态的约定是什么

例如,假设有三种状态a、b和c

这两个转换分别称为d和e

假设我们处于状态a,然后触发事件x以转换到状态b

时间线可能如下所示:

a a a a a a a a a x                     b b b b b b b
. . . . . . . . . . . . . . . . . . . . . . . . . . .
                         d complete --^
                    |_________________|
                       intermediate
                           area
在中间区域,想知道状态是什么,因为系统正在变化,所以它可能既不处于状态a也不处于状态b。想知道人们通常是如何处理这个问题的

似乎有三种方式可以实现:

  • 它保持在状态a,直到中间区域完成
  • 它会进入中间状态,例如“转换”
  • 它直接进入状态b,但有一个标志表明它还不能从状态b转换出来
  • 在状态转换期间,“状态之间”的问题可以通过强制执行处理事件的运行到完成(RTC)语义来避免,这是所有状态机形式(包括UML状态图)普遍采用的。RTC意味着状态机在开始处理下一个事件之前,必须始终完成对上一个事件的处理

    RTC限制来自一个事实,即状态机必须始终运行 在一个不可分割的步骤(RTC步骤)中从一个稳定状态配置一直到另一个稳定状态配置。由于事件是与状态机交互的唯一方式,因此无法在“中间”稳定状态配置中观察到状态机

    此外,明确区分RTC的概念和线程抢占的概念也非常重要(参见示例)。特别是,RTC并不意味着状态机必须独占CPU,直到RTC步骤完成。在抢占式多任务内核下,RTC步骤可以被在同一CPU上执行的另一个线程抢占。这是由底层多任务内核的调度策略决定的。当暂停线程(运行状态机)再次被分配CPU时,它将从抢占点恢复其事件处理,并最终完成其事件处理。只要抢占线程和抢占线程不共享任何资源,就不存在并发危害

    最后,非常重要的是要注意RTC语义是如何被违反的(通常是无意中违反的)。第一个常见错误是在状态机和其他并发线程之间共享变量或其他资源。在RTC步骤中间的抢占情况下,这些变量或资源可以被访问(“观察”),而它们可能不处于一致状态。
    违反RTC语义的另一种常见方式是阻塞状态机内部(例如,通过调用延时函数、信号量或其他此类操作系统原语)。在这种情况下,阻塞(和取消阻塞)是向状态机传递事件的另一种“后门”方式。问题是,这样的“后门”事件到达RTC步骤的中间,从而违反RTC语义。

    它既不处于过渡状态,也不处于过渡状态。它介于两者之间。但这又有什么关系呢?你是在某处对该州进行民意调查吗?什么是“异步”转换?状态将被轮询,是的。从彻底的角度来看,我希望在州与州之间发生一件明确的事情。我认为,对州机器进行投票是个坏主意。为什么不让状态机在进入和/或离开状态时调用回调?然后您的系统可以动态地响应状态更改。此外,它还可以为另一个状态机生成事件。
    d: a -> b
    e: b -> c
    
    a a a a a a a a a x                     b b b b b b b
    . . . . . . . . . . . . . . . . . . . . . . . . . . .
                             d complete --^
                        |_________________|
                           intermediate
                               area