一种状态处理方法、装置及电子设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种状态处理方法、装置及电子设备。
背景技术
有限状态机(简称状态机)是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。一个状态机可包括现态、条件、动作和次态4个要素,其中,现态是指当前所处的状态(或称当前状态);条件又称为“事件”,当一个条件被满足(或者说状态机接收到一个事件),将会触发一个动作或者执行一次状态迁移;动作是指条件满足后执行的动作,动作执行完毕后,可以迁移到新状态或保持原状态,动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态;次态(或称目标状态)是条件满足后要迁往的新状态,次态是相对于现态而言的,次态一旦被激活,就转变成新的现态了。
状态机被广泛地应用在计算机领域中,例如在处理一些业务时,如果把业务模型抽象成一个状态机,那么该业务模型的代码就会大大简化。但是,现有的状态机模型中的状态迁移机制仍存在一些弊端,不适合复杂业务场景,需要改进。例如,在分布式环境下,事件体现为不同系统之间异步触发的消息、远程调用等交互过程,不同事件之间的时序关系复杂,以及事件触发延迟、重复等情况也常常发生,如果使用现有的“Stateless4j”或“Spring-State machine”状态机模型,则会出现状态跳跃式迁移等差错。
发明内容
本申请实施例提供了一种状态处理方法、装置及电子设备,以避免状态机的状态推进出现差错。
为解决上述技术问题,本申请实施例是这样实现的:
第一方面,提出了一种状态处理方法,所述方法包括:
接收输入状态机的第一事件;
确定所述第一事件对应的期望状态;
基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
基于所述当前状态场景对应的处理规则进行状态处理。
第二方面,提出了一种状态处理装置,所述装置包括:
接收模块,用于接收输入状态机的第一事件;
第一确定模块,用于确定所述第一事件对应的期望状态;
第二确定模块,用于基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
处理模块,用于基于所述当前状态场景对应的处理规则进行状态处理。
第三方面,提出了一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
接收输入状态机的第一事件;
确定所述第一事件对应的期望状态;
基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
基于所述当前状态场景对应的处理规则进行状态处理。
第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
接收输入状态机的第一事件;
确定所述第一事件对应的期望状态;
基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
基于所述当前状态场景对应的处理规则进行状态处理。
由以上本申请实施例提供的技术方案可见,本申请实施例提供的方案至少具备如下一种技术效果:由于状态机在接收到输入的第一事件后,没有直接从当前状态迁移至第一事件对应的目标状态,而是依据第一事件对应的期望状态与当前状态的上下文关系,确定出状态机的当前状态场景,然后依据不同的当前状态场景对应的处理规则进行状态处理。因此,可以避免状态机的状态推进出现差错。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本说明书实施例提供的状态处理方法的一种流程示意图。
图2是本说明书实施例提供的状态处理方法的原理示意图之一。
图3是本说明书实施例提供的状态处理方法的原理示意图之二。
图4是本说明书实施例提供的状态处理方法的原理示意图之三。
图5是本说明书实施例提供的状态处理方法的原理示意图之四。
图6是本说明书实施例提供的一种电子设备的结构示意图。
图7是本说明书实施例提供的状态处理装置的一种结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了避免状态机的状态迁移出现差错,本说明书实施例提供一种状态处理方法及装置,该方法和装置的执行主体可以是状态机本身,或者可以理解为本说明书实施例提出了一种状态机模型,且作为一个例子,该状态机模型可以用于处理分布式系统中的业务逻辑。
下面结合附图1至图4,对本说明书实施例提供的一种状态处理方法进行详细的说明。
如图1所示,本说明书实施例提供的一种状态处理方法,可以应用于状态机,该方法可以包括如下步骤:
步骤102、接收输入状态机的第一事件。
上述状态机可以是应用于任何场景中的状态机,上述第一事件可以是输入状态机的任一事件。例如,当状态机用于处理分布式系统中的业务逻辑时,第一事件可以是该分布式系统中一个系统发送给另一系统的消息,一个系统对另一个系统的远程调用请求,等等。
步骤104、确定所述第一事件对应的期望状态。
第一事件对应的期望状态,是指第一事件进入状态机时,期望状态机出现的当前状态。例如,假设一个状态机包括状态1、状态2和状态3这三个状态,且在正常的业务逻辑下,状态机在接收到事件1时从状态1迁移到状态2,状态机在接收事件2时从状态2迁移到状态3,那么,事件1对应的期望状态为状态1,事件2对应的期望状态为状态2。
在实际应用中,可以事先定义不同事件的期望状态及目标状态的映射关系,例如定义如表1所示的映射关系,这样步骤104可以通过查询该映射关系确定第一事件对应的期望状态。
表1
事件 |
期望状态 |
目标状态 |
事件A |
状态a |
状态b |
事件B |
状态b |
状态c |
… |
… |
… |
步骤106、基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景。
下面先对状态与状态之间的上下文关系进行解释。
一个状态的下文,可以理解为是在满足一定条件时,能从该状态迁移到达的后继状态;一个状态的上文,可以理解为是能在满足一定条件时迁移到达该状态的前驱状态。举例来说,假如状态机在满足一定条件(也可称为状态转移规则)时,能够从现态(Scurrent)迁移到目标状态(Starget),那么现态(Scurrent)就是目标状态(Starget)的上文,目标状态(Starget)就是现态(Scurrent)的下文。
我们可以把状态机中的状态想象成节点,将状态与状态之间的迁移关系想成连接节点的边,这样就可以构造出由节点和连接节点的边构成的状态机结构图,例如构造出如图2至图5所示的状态机22的结构图。
以图2为例来说,状态1、状态2和状态3均可以是状态5的上文,相应的,状态5可以是状态1、状态2和状态3的下文。应理解,状态5的上文不仅仅包括通过一跳转移能到达状态5的状态2和状态3,还包括通过两跳转移能到达状态5的状态1;相应的,状态1的下文不仅仅包括通过一跳转移能到达的状态2和状态3,还包括需要通过两跳转移才能到达的状态5。也就是说,一个状态的上文不仅仅包括能够直接转移至该状态的前驱状态,还包括能够间接转移至该状态的前驱状态,以及一个状态的下文不仅仅包括能够从该状态直接转移到达的后继状态,还包括能够从该状态间接转移到达的后继状态。
此外,如果说一个状态与另一个状态相同,说明前者不是后者的上文,后者也不是前者的下文,二者是同一状态。如果说一个状态不存在可相互迁移的关系,那么可认为这两个状态之间不存在上下文关系。这两种情况可以理解为是两种特殊的上下文关系。
在此基础上,示例性地,在步骤106中,可以依据状态机的当前状态与所述期望状态之间的上下文关系的不同,确定出如下四种状态场景。
第一种,如果所述当前状态与所述期望状态的相同,确定所述当前状态场景为无差错场景。当前状态与期望状态相同,意味着状态机的真实当前状态与第一事件输入状态机时期望状态机出现的当前状态匹配,这说明状态机的状态迁移未出现异常,因此可以将当前状态场景确定为无差错场景(Match)。
第二种,如果所述当前状态为所述期望状态的下文,确定所述当前状态场景为延时差错场景。当前状态为期望状态的下文,说明第一事件进入状态机的时间发生了延迟,导致状态机的真实当前状态与第一事件输入状态机时期望状态机出现的当前状态不匹配,因此可以将当前状态场景确定为延时差错场景(Time Out)。
第三种,如果所述当前状态为所述期望状态的上文,确定所述当前状态场景为早熟差错场景。当前状态为期望状态的上文,说明第一事件进入状态机的时间过早,导致状态机的真实当前状态与第一事件输入状态机时期望状态机出现的当前状态也不匹配,因此可以将当前状态场景确定为早熟差错场景(Earlymature)。
第四种,如果所述当前状态与所述期望状态之间不存在上下文关系,确定所述当前状态场景为不相关差错场景。当前状态与期望状态不存在上下文关系,说明第一事件此时不应进入状态机,或者说即使第一事件进入状态机,状态机也不应执行与第一事件对应的状态迁移,因此可以将当前状态场景确定为不相关差错场景(Irelavent)。
应理解,上述四种状态场景仅仅是举例,并不构成对本说明书提供的技术方案的限制。
步骤108、基于所述当前状态场景对应的处理规则进行状态处理。
在第一个例子中,可以事先针对不同的状态场景设置不同的处理规则,以在第一事件进入状态机时,进行状态处理。
在第二个例子中,可以先确定所述当前差错处理级别,然后针对不同差错处理级别下的不同状态场景设置不同的处理规则,以基于所述状态机的当前差错处理级别下与所述当前状态场景对应的处理规则进行状态处理。
在本说明书实施例中,示例性地引入了三种差错处理级别:最高级别(HardMatch)、中间级别(Soft Landing)和最低级别(Silent)。
在一种实施方式中,如果状态机对所述当前状态与所述期望状态的匹配程度的要求为强匹配,则确定当所述前差错处理级别为最高级别(Hard Match);如果状态机对所述当前状态与所述期望状态的匹配程度的要求为弱匹配,则确定当所述前差错处理级别为最低级别(Silent);如果状态机对所述当前状态与所述期望状态的匹配程度的要求介于强匹配和弱匹配之间,则确定当所述前差错处理级别为中间级别(Soft Landing)。
其中,当前状态与第一事件对应的期望状态的匹配程度,可以通过当前状态与所述期望状态是否相同来确定,一般来说,如果说当前状态与所述期望状态相同,说明二者的匹配程度高,如果说当前状态与所述期望状态不相同,说明二者的匹配程度低。
当然,当所述前差错处理级别的确定,也可以依据其他方式,本说明书实施例对此不做限定。
在上述第二个例子中,可以针对不同差错处理级别下的状态场景,可以制定出如下表2所示的处理规则。
表2
参考表2可知,在一种实施方式中,当所述当前差错处理级别为最高级别时,如果所述当前状态场景为所述延时差错场景、所述早熟差错场景和所述不相关差错场景中的任一种,则所述处理规则可以包括:终止所述状态机的状态推进和给出所述状态机出现异常的至少一种;如果状态机的当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
也即,当第一事件进入状态机时,如果所述当前差错处理级别为最高级别,则仅在当前状态为无差错场景时控制状态机从所述当前状态迁移至所述第一事件对应的目标状态;如果所述当前状态场景为延时差错场景、早熟差错场景和不相关差错场景中的任一种,则上述步骤108可以终止所述状态机的状态推进和/或给出所述状态机出现异常(抛出异常)。可以理解,状态机抛出异常之后,可以等待人工介入排除状态机出现的异常,否则状态机停止推进。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为最低级别时,如果所述当前状态场景为所述延时差错场景、所述早熟差错场景和所述不相关差错场景中的任一种,则所述处理规则可以包括:控制所述状态机不执行与所述第一事件对应的状态迁移;如果状态机的当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
也即,当第一事件进入状态机时,如果所述当前差错处理级别为最低级别,则仅在当前状态为无差错场景时控制状态机从所述当前状态迁移至所述第一事件对应的目标状态;如果所述当前状态场景为延时差错场景、早熟差错场景和不相关差错场景中的任一种,则上述步骤108可以控制所述状态机不执行与所述第一事件对应的状态迁移,但不终止状态机的推进。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别时,如果所述当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
以图2为例来说,假设事件、事件对应的期望状态和目标状态如表3所示,外部系统(可以是分布式系统)21向状态机22输入事件3,且事件3进入状态机22时状态机22的当前状态为状态2,根据表3可知,事件3对应的期望状态和目标状态分别是状态2和状态3。由于状态机22的当前状态(状态2)与事件3对应的期望状态(状态2)相同,因此状态机22可以直接从状态2迁移至状态3。
表3
事件 |
期望状态 |
目标状态 |
事件1 |
状态1 |
状态1 |
事件2 |
状态1 |
状态3 |
事件3 |
状态2 |
状态3 |
事件4 |
状态2 |
状态5 |
… |
… |
… |
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述延时差错场景,则所述处理规则可以包括:控制状态机不执行与第一事件对应的状态迁移。
下面假设事件、事件对应的期望状态和目标状态仍如上表3所示,并以图2和图3为例对中间级别下延时差错场景对应的处理规则进行说明。
如图2所示,外部系统21向状态机22输入事件3,此时,状态机22的当前状态为状态2,这与事件3的期望状态相同,因此状态机22可以从状态2迁移至状态3。但继续参考图3可知,外部系统21在事件3超时后又向状态机22重发事件3,此时状态机22的当前状态已变为状态3,这与事件3对应的期望状态不同,且当前状态(状态3)是期望状态(状态2)的后继,说明事件3进入状态机22的时间存在延时(或者说重发的事件3为延时事件),状态机22已经迁移至事件3对应的目标状态(状态3),按照状态间的迁移顺序,状态机22已没有必要执行从状态2迁移至状态3的迁移操作,因此对应的处理规则可以是:控制状态机不执行与第一事件对应的状态迁移。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述早熟差错场景,则对应的处理规则可以包括:按照状态间的迁移顺序将所述第一事件缓存至等待队列,并在所述状态机的任一次状态迁移结束后,从所述等待队列中找出与新的当前状态匹配的第二事件,控制所述状态机从所述新的当前状态迁移至所述第二事件对应的目标状态。
下面假设事件、事件对应的期望状态和目标状态如下表4所示,并以图2和图4为例对中间级别下早熟差错场景对应的处理规则进行说明。
表4
事件 |
期望状态 |
目标状态 |
事件1 |
状态1 |
状态1 |
事件2 |
状态1 |
状态3 |
事件3 |
状态2 |
状态3 |
事件4 |
状态2 |
状态5 |
事件5 |
状态3 |
状态5 |
事件6 |
状态5 |
状态6 |
… |
… |
… |
如图2所示,假设外部系统21的事件3进入状态机22后,触发状态机22从状态2(当前状态)迁移至状态3(目标状态),迁移后的状态机22如图4所示。继续参考图4可知,外部系统21在处理事件5对应的事务时出错,导致事务回滚,使得事件5对应的从状态3迁移至状态5的状态迁移失败,当前状态仍然为状态3,后续事件(事件6)在状态机22未完成事件5对应的状态迁移的情况下进入状态机22。从表4可知,事件6对应的期望状态为状态5,这与状态机22的当前状态(状态3)不相同,且参考图4可知,状态3是状态5的上文,状态5是是状态3的下文,可见事件6是一个早熟事件,当前差错场景为早熟差错场景,此时按照状态间的迁移顺序,可以将事件6缓存至等待队列23,并在状态机22的任一次状态迁移结束后,从所述等待队列中找出与新的当前状态匹配的第二事件,控制所述状态机从所述新的当前状态迁移至所述第二事件对应的目标状态,直至迁移至终态。这样的话,如果说第二事件为事件6,说明状态机22已完成从状态3至状态5的迁移,当前状态已更新为状态5,可以执行与事件6对应的状态迁移。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述不相关差错场景,则对应的处理规则可以包括:终止所述状态机的状态迁移和给出所述状态机出现异常的至少一种。
下面假设事件、事件对应的期望状态和目标状态仍如上表4所示,并以图5为例对中间级别下不相关差错场景对应的处理规则进行说明。
如图5所示,事件4进入状态机22时,状态机22的当前状态为状态3。根据上表4可知,事件4对应的期望状态为状态2。但是,继续参考图5可知,状态2和状态3之间不存在上下文关系,状态机22的当前状态的上下文与状态2无关,说明事件4进入状态机22的时机不正确,或者说明状态机22出现了异常,因此可以不执行与事件4对应的状态迁移。
可以理解,如果当前状态与期望状态之间不存在上下文关系,说明第一事件在错误的时机进入了状态,或者说状态机出现了异常,因此,需要终止状态机的状态推进和/或给出所述状态机出现异常(抛出异常),等待人工介入。
从表2中可以看出,在三种差错级别(最高级别、中间级别和最低级别)下,如果状态机的当前状态场景为无差错场景,则对应的处理规则均可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
从上述实施方式可以看出,在本说明书实施例中,除了第一事件,还将第一事件对应的期望状态也作为是否触发状态机从当前状态迁移至所述第一事件对应的目标状态的条件。也即在本说明书实施例中,状态机的状态迁移规则为:
(Scurrent,(E,Sexpect))→action+Starget
其中,Scurrent为当前状态,E为事件,Sexpect为期望状态,Starget为目标状态,action为本说明书背景技术中所说的动作。
总之,本说明书实施例提供的一种状态处理方法,由于状态机在接收到输入的第一事件后,没有直接从当前状态迁移至第一事件对应的目标状态,而是依据第一事件对应的期望状态与当前状态的上下文关系,确定出状态机的当前状态场景,然后依据不同的当前状态场景对应的处理规则进行状态处理。因此,可以避免状态机的状态推进出现差错。
也就是说,本说明书实施例提供的一种状态处理方法,不仅仅是依据进入状态机的第一事件进行状态迁移,还依据第一事件对应的期望状态确定第一事件进入状态机的时机是否合理,并在合理时执行与第一事件对应的状态迁移,否则要么不执行与第一事件对应的状态迁移,要么终止状态机的推进和/或抛出状态机异常。
可选地,在另一实施例中,本说明书实施例提供的一种状态处理方法,还可以包括:在所述状态机从所述当前状态迁移至所述第一事件对应的目标状态失败时,重新控制所述状态机从所述当前状态迁移至所述第一事件对应的目标状态,并采用幂等性保证所述当前状态至所述第一事件对应的目标状态之间的状态迁移只发生一次。
其中,关于采用幂等性保证当前状态至第一事件对应的目标状态之间的状态迁移只发生一次的具体内容,请参考相关技术,本文不予赘述。
以上是对本说明书提供一种状态处理方法的说明,下面对本说明书提供的电子设备进行介绍。
图6是本说明书的一个实施例提供的电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成状态处理装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
接收输入状态机的第一事件;
确定所述第一事件对应的期望状态;
基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
基于所述当前状态场景对应的处理规则进行状态处理。
上述如本说明书图1所示实施例揭示的状态处理方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书一个或多个实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书一个或多个实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图1的状态处理方法,本说明书在此不再赘述。
当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图2-3所示实施例的方法,并具体用于执行以下操作:
接收输入状态机的第一事件;
确定所述第一事件对应的期望状态;
基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景;
基于所述当前状态场景对应的处理规则进行状态处理。
下面对本说明书提供的一种状态处理装置进行说明。
图7是本说明书提供的状态处理装置700的结构示意图。请参考图7,在一种软件实施方式中,状态处理装置700可应用于状态机,装置700可包括:接收模块701、第一确定模块702、第二确定模块703和处理模块704。
接收模块701,接收输入状态机的第一事件。
上述状态机可以是应用于任何场景中的状态机,上述第一事件可以是输入状态机的任一事件。例如,当状态机用于处理分布式系统中的业务逻辑时,第一事件可以是该分布式系统中一个系统发送给另一系统的消息,一个系统对另一个系统的远程调用请求,等等。
第一确定模块702,用于确定所述第一事件对应的期望状态。
第一事件对应的期望状态,是指第一事件进入状态机时,期望状态机出现的当前状态。
在实际应用中,可以事先定义不同事件的期望状态及目标状态的映射关系,例如定义如上文中表1所示的映射关系,这样第一确定模块702可以通过查询该映射关系确定第一事件对应的期望状态。
第二确定模块703,用于基于所述状态机的当前状态与所述期望状态之间的上下文关系,确定所述状态机的当前状态场景。
一个状态的下文,可以理解为是在满足一定条件时,能从该状态迁移到达的后继状态;一个状态的上文,可以理解为是能在满足一定条件时迁移到达该状态的前驱状态。举例来说,假如状态机在满足一定条件(也可称为状态转移规则)时,能够从现态(Scurrent)迁移到目标状态(Starget),那么现态(Scurrent)就是目标状态(Starget)的上文,目标状态(Starget)就是现态(Scurrent)的下文。
并且,一个状态的上文不仅仅包括能够直接转移至该状态的前驱状态,还包括能够间接转移至该状态的前驱状态,以及一个状态的下文不仅仅包括能够从该状态直接转移到达的后继状态,还包括能够从该状态间接转移到达的后继状态。
此外,如果说一个状态与另一个状态相同,说明前者不是后者的上文,后者也不是前者的下文,二者是同一状态。如果说一个状态不存在可相互迁移的关系,那么可认为这两个状态之间不存在上下文关系。这两种情况可以理解为是两种特殊的上下文关系。
在此基础上,示例性地,第二确定模块703可以依据状态机的当前状态与所述期望状态之间的上下文关系的不同,确定出如下四种状态场景。
第一种,如果所述当前状态与所述期望状态的相同,确定所述当前状态场景为无差错场景(Match)。
第二种,如果所述当前状态为所述期望状态的下文,确定所述当前状态场景为延时差错场景(Time Out)。
第三种,如果所述当前状态为所述期望状态的上文,确定所述当前状态场景为早熟差错场景(Earlymature)。
第四种,如果所述当前状态与所述期望状态之间不存在上下文关系,确定所述当前状态场景为不相关差错场景(Irelavent)。
应理解,上述四种状态场景仅仅是举例,并不构成对本说明书提供的技术方案的限制。
处理模块704,用于基于所述当前状态场景对应的处理规则进行状态处理。
在第一个例子中,可以事先针对不同的状态场景设置不同的处理规则,以在第一事件进入状态机时,进行状态处理。
在第二个例子中,可以先确定所述当前差错处理级别,然后针对不同差错处理级别下的不同状态场景设置不同的处理规则,以基于所述状态机的当前差错处理级别下与所述当前状态场景对应的处理规则进行状态处理。
在本说明书实施例中,示例性地引入了三种差错处理级别:最高级别(HardMatch)、中间级别(Soft Landing)和最低级别(Silent)。
在一种实施方式中,如果状态机对所述当前状态与所述期望状态的匹配程度的要求为强匹配,则确定当所述前差错处理级别为最高级别(Hard Match);如果状态机对所述当前状态与所述期望状态的匹配程度的要求为弱匹配,则确定当所述前差错处理级别为最低级别(Silent);如果状态机对所述当前状态与所述期望状态的匹配程度的要求介于强匹配和弱匹配之间,则确定当所述前差错处理级别为中间级别(Soft Landing)。
其中,当前状态与第一事件对应的期望状态的匹配程度,可以通过当前状态与所述期望状态是否相同来确定,一般来说,如果说当前状态与所述期望状态相同,说明二者的匹配程度高,如果说当前状态与所述期望状态不相同,说明二者的匹配程度低。
当然,当所述前差错处理级别的确定,也可以依据其他方式,本说明书实施例对此不做限定。
在上述第二个例子中,可以针对不同差错处理级别下的状态场景,可以制定出如上文中表2所示的处理规则。
参考表2可知,在一种实施方式中,当所述当前差错处理级别为最高级别时,如果所述当前状态场景为所述延时差错场景、所述早熟差错场景和所述不相关差错场景中的任一种,则所述处理规则可以包括:终止所述状态机的状态推进和给出所述状态机出现异常的至少一种;如果状态机的当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为最低级别时,如果所述当前状态场景为所述延时差错场景、所述早熟差错场景和所述不相关差错场景中的任一种,则所述处理规则可以包括:控制所述状态机不执行与所述第一事件对应的状态迁移;如果状态机的当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别时,如果所述当前状态场景为无差错场景,则所述处理规则可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述延时差错场景,则所述处理规则可以包括:控制状态机不执行与第一事件对应的状态迁移。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述早熟差错场景,则对应的处理规则可以包括:按照状态间的迁移顺序将所述第一事件缓存至等待队列,并在所述状态机的任一次状态迁移结束后,从所述等待队列中找出与新的当前状态匹配的第二事件,控制所述状态机从所述新的当前状态迁移至所述第二事件对应的目标状态。
参考表2可知,在另一种实施方式中,当所述当前差错处理级别为中间级别,如果所述当前状态场景为所述不相关差错场景,则对应的处理规则可以包括:终止所述状态机的状态迁移和给出所述状态机出现异常的至少一种。
从表2中可以看出,在三种差错级别(最高级别、中间级别和最低级别)下,如果状态机的当前状态场景为无差错场景,则对应的处理规则均可以包括:控制状态机从所述当前状态迁移至所述第一事件对应的目标状态。
从上述实施方式可以看出,在本说明书实施例中,除了第一事件,还将第一事件对应的期望状态也作为是否触发状态机从当前状态迁移至所述第一事件对应的目标状态的条件。
总之,本说明书实施例提供的一种状态处理装置700,由于状态机在接收到输入的第一事件后,没有直接从当前状态迁移至第一事件对应的目标状态,而是依据第一事件对应的期望状态与当前状态的上下文关系,确定出状态机的当前状态场景,然后依据不同的当前状态场景对应的处理规则进行状态处理。因此,可以避免状态机的状态推进出现差错。
也就是说,本说明书实施例提供的一种状态处理装置700,不仅仅是依据进入状态机的第一事件进行状态迁移,还依据第一事件对应的期望状态确定第一事件进入状态机的时机是否合理,并在合理时执行与第一事件对应的状态迁移,否则要么不执行与第一事件对应的状态迁移,要么终止状态机的推进和/或抛出状态机异常。
可选地,在另一实施例中,本说明书实施例提供的一种状态处理装置700,还可以包括:控制模块。
上述控制模块,用于在所述状态机从所述当前状态迁移至所述第一事件对应的目标状态失败时,重新控制所述状态机从所述当前状态迁移至所述第一事件对应的目标状态,并采用幂等性保证所述当前状态至所述第一事件对应的目标状态之间的状态迁移只发生一次。
其中,关于采用幂等性保证当前状态至第一事件对应的目标状态之间的状态迁移只发生一次的具体内容,请参考相关技术,本文不予赘述。
需要说明的是,状态处理装置700能够实现图1的方法实施例的方法,具体可参考图1所示实施例的状态处理方法,不再赘述。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制时,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。