状态机处理方法及装置、可读存储介质与流程

文档序号:16929807发布日期:2019-02-22 20:10阅读:146来源:国知局
状态机处理方法及装置、可读存储介质与流程

本发明实施例涉及计算机应用技术领域,尤其涉及一种状态机处理方法及装置、可读存储介质。



背景技术:

状态机在计算机领域应用非常广泛,许多系统都使用到状态机。状态机由一组节点(状态)和一组相应的转移函数组成,其定义了多个状态以及状态之间的迁移,在所定义的多个状态之中,存在至少一个初态和至少一个终态,状态机从初态开始运行,当迁移到终态时,状态机停止运行。

对于状态变换,现有技术中采用传统的串行状态机,即状态机通过响应一系列事件而运行,当事件满足某些触发条件时,将导致状态机从当前的状态迁移到下一个状态。

在多状态的串行状态机中,当多状态并存且不同状态之间转换较多,所有的状态和事件会组成一个全连接图,需要维护的状态和事件是状态图的全连接数(为n*(n-1)/2,n为状态总数),导致串行状态和事件非常多,维护起来很困难。



技术实现要素:

本发明实施例提供一种状态机处理方法及装置、可读存储介质,减少了状态机需要维护的状态和事件,便于维护。

第一方面,本发明实施例提供一种状态机处理方法,包括:

确定状态机中的n个状态,n为正整数;

根据所述状态机对应的业务逻辑,将所述n个状态中可并行运行的状态分类;

将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据所述业务逻辑确定的事件;

并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到所述状态机的运行结果。

可选的,所述将每一类的状态建立成一个子状态机,包括:

若一类状态所包括的状态数为1,则建立子状态机时添加正常状态为状态数为1对应的子状态机中的初态。

可选的,所述方法还包括:

在所述状态机中添加堆栈,在每一子状态机中添加子堆栈,所述堆栈和所述子堆栈满足先进后出规则;

在进行状态迁移时,将迁移后的状态入栈存储。

可选的,所述方法还包括:

在进行状态回退时,将所述堆栈中后入栈的状态先进行出栈,直到栈底,得到所述堆栈中的所有状态;

将所述子堆栈中后入栈的状态先进行出栈,直到栈底,得到所述子堆栈中的所有状态。

第二方面,本发明实施例提供一种状态机处理装置,包括:

确定模块,用于确定状态机中的n个状态,n为正整数;

分类模块,用于根据所述状态机对应的业务逻辑,将所述n个状态中可并行运行的状态分类;

第一处理模块,用于将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据所述业务逻辑确定的事件;

运行模块,用于并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到所述状态机的运行结果。

可选的,所述第一处理模块用于:

若一类状态所包括的状态数为1,则建立子状态机时添加正常状态为状态数为1对应的子状态机中的初态。

可选的,所述装置还包括:

第二处理模块,用于在所述状态机中添加堆栈,在每一子状态机中添加子堆栈,所述堆栈和所述子堆栈满足先进后出规则;

在进行状态迁移时,将迁移后的状态入栈存储。

可选的,所述第二处理模块还用于:

在进行状态回退时,将所述堆栈中后入栈的状态先进行出栈,直到栈底,得到所述堆栈中的所有状态;

将所述子堆栈中后入栈的状态先进行出栈,直到栈底,得到所述子堆栈中的所有状态。

第三方面,本发明实施例提供一种状态机处理装置,包括:

存储器,用于存储程序指令;

处理器,用于调用并执行所述存储器中的程序指令,以实现第一方面的状态机处理方法。

第四方面,本发明实施例提供一种可读存储介质,可读存储介质中存储有计算机程序,当状态机处理装置的至少一个处理器执行该计算机程序时,状态机处理装置执行第一方面的状态机处理方法。

第五方面,本发明实施例提供一种程序产品,该程序产品包括计算机程序,该计算机程序存储在可读存储介质中。状态机处理装置的至少一个处理器可以从可读存储介质读取该计算机程序,至少一个处理器执行该计算机程序使得状态机处理装置实施第一方面的状态机处理方法。

本发明实施例提供的状态机处理方法及装置、可读存储介质,根据状态机对应的业务逻辑,将状态机的n个状态中可并行运行的状态分类,接着将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据业务逻辑确定的事件,最后并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到状态机的运行结果,从而,通过根据串行状态机得到多个并行的子状态机,子状态机之间互不影响,子状态机的运行结果可以组合,最终得到状态机的运行结果,相比原串行状态机,子状态机所包含的状态数减少,子状态机对应状态图的全连接数也减少了,因此减少了状态机需要维护的状态和事件,因此便于维护。

附图说明

为了清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种状态机处理方法实施例的流程图;

图2为一种简单的串行状态机;

图3为本发明提供的一种状态机处理方法实施例的流程图;

图4为一种多状态串行状态机;

图5为对图4所示的串行状态机进行处理后得到的子状态机的示意图;

图6为本发明实施例提供的一种状态机处理装置实施例的结构示意图;

图7为本发明实施例提供的一种状态机处理装置实施例的结构示意图;

图8为本发明实施例提供的一种状态机处理装置实施例的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。

现有技术中,使用的是事件驱动、单状态迁移的串行状态机,在多种状态并存的时候,不同状态之间转换较多,因此需要维护的状态和事件非常多,维护起来很困难,为解决这问题,本申请提供一种状态机处理方法及装置、可读存储介质,通过根据串行状态机得到多个并行的子状态机,子状态机之间互不影响,子状态机的运行结果可以组合,最终得到状态机的运行结果,相比原串行状态机,子状态机中的状态数和对应状态图的全连接数都大大减少,因此可以轻松的实现子状态机中状态和事件的维护。下面结合附图详细说明本申请的技术方案。

本申请中所述的状态机,是指有限状态机,本申请提供的状态机处理方法及装置,可应用于计算机领域,具体可应用于建模应用行为、硬件电路系统设计、软件工程、编译器、网络协议和计算与语言的研究等。

图1为本发明提供的一种状态机处理方法实施例的流程图,本实施例的方法可应用于状态数和事件数较多的串行状态机中,本实施例的执行主体可以为任一具有执行本实施例的状态机处理方法的功能的软件或硬件,如图1所示,本实施例的方法可以包括:

s101、确定状态机中的n个状态,n为正整数。

具体地,即就是确定状态机从初态到终态之间一共所包括的状态,图2为一种简单的串行状态机,以图2所示的状态机为例,该状态机从初态到终态之间一共包括初始化状态和第一状态2个状态。

s102、根据所述状态机对应的业务逻辑,将所述n个状态中可并行运行的状态分类。

具体地,根据状态机对应的业务逻辑,将n个状态中可并行运行的状态分类,不同的业务逻辑,分类不同,例如状态机中从初态到终态之间一共包括10个状态,分类后有2类,第一类包括4个状态,第二类包括6个状态,这2类状态可以并行运行。其中,可并行运行的状态是指可同时运行的状态。

具体地,状态机分类的依据是一个分类中的状态可以独立于另一个分类中的状态,如针对一个游戏的逻辑,运动的走跑跳状态可以独立于射击的开枪状态,这样运动状态可组成一个子状态机,射击状态可组成一个子状态机。

s103、将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据所述业务逻辑确定的事件。

具体地,s102中分类后有几类,对应就可建立为几个子状态机,每一子状态机包括至少两个状态和根据所述业务逻辑确定的事件,子状态机中的事件还是根据状态机的业务逻辑确定,例如还可以是将状态机中相应的事件提取出来,得到的多个子状态机可以并行运行。

其中,若一类状态所包括的状态数为1,则建立子状态机时添加正常状态为状态数为1对应的子状态机中的初态。即就是说,若某一类只包括1个状态,则添加该状态对应的正常状态作为子状态机中的初态,终态为所包括的1个状态。

s104、并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到所述状态机的运行结果。

具体地,并行运行所建立的所有的子状态机,得到运行结果后,进行组合,最终可得到状态机的运行结果,例如:并行运行2个子状态机,子状态机1在第一时刻的运行结果为a,子状态机2在第一时刻的运行结果为b,那么第一时刻状态机的运行结果就是ab,也就是两个子状态机运行结果的组合。

通过根据串行状态机得到多个并行的子状态机,子状态机之间互不影响,子状态机的运行结果可以组合,最终得到状态机的运行结果,相比串行状态机,子状态机中的状态数和对应状态图的全连接数都大大减少,其中连接数代表两个状态之间的关系,全连接数为连接数的总数目,因此便于维护。

本实施例提供的状态机处理方法,根据状态机对应的业务逻辑,将状态机的n个状态中可并行运行的状态分类,接着将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据业务逻辑确定的事件,最后并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到状态机的运行结果,从而,通过根据串行状态机得到多个并行的子状态机,子状态机之间互不影响,子状态机的运行结果可以组合,最终得到状态机的运行结果,相比原串行状态机,子状态机所包含的状态数减少,子状态机对应状态图的全连接数也减少了,因此减少了状态机需要维护的状态和事件,因此便于维护。

在多状态的串行状态机中,当状态中出现业务错误,需要进行业务回滚时,由于传统的串行状态机无法记录历史状态,所以无法实现业务逻辑回滚,造成无用的数据。为了便于追踪历史状态,本发明实施例在图1所示方法的基础上,通过在状态机中添加堆栈,在每一子状态机中添加子堆栈,堆栈和子堆栈满足先进后出规则,在进行状态迁移时,将迁移后的状态入栈存储,从而可实现状态的回退,追踪历史状态,达到业务回滚的需求。下面结合附图详细说明这一技术方案。

图3为本发明提供的一种状态机处理方法实施例的流程图,如图3所示,本实施例的方法在图1所示方法的基础上,进一步地,还可以包括:

s105、在所述状态机中添加堆栈,在每一子状态机中添加子堆栈,所述堆栈和所述子堆栈满足先进后出规则,在进行状态迁移时,将迁移后的状态入栈存储。

需要说明的是,s105可以是在s103建立子状态机之后执行。

s106、在进行状态回退时,将所述堆栈中后入栈的状态先进行出栈,直到栈底,得到所述堆栈中的所有状态,将所述子堆栈中后入栈的状态先进行出栈,直到栈底,得到所述子堆栈中的所有状态。

具体地,以图2所示的状态机为例,例如,在图2所示的状态机中添加堆栈,在进行状态迁移时,将迁移后的状态入栈存储,迁移到终态时,入栈存储的状态从左至右为:终态、第一状态和初始化状态。若在终态进行状态回退时,将堆栈中后入栈的状态先进行出栈,直到栈底,得到堆栈中的所有状态,为:终态、第一状态和初始化状态。从而可实现状态的回退,追踪历史状态,达到业务回滚的需求。

本实施例提供的状态机处理方法,通过在状态机中添加堆栈,在每一子状态机中添加子堆栈,堆栈和子堆栈满足先进后出规则,在进行状态迁移时,将迁移后的状态入栈存储,在进行状态回退时,将堆栈中后入栈的状态先进行出栈,直到栈底,得到堆栈中的所有状态,将子堆栈中后入栈的状态先进行出栈,直到栈底,得到子堆栈中的所有状态。从而可实现状态的回退,便于追踪到历史状态,当业务逻辑错误时,实现业务逻辑回滚。且同时具备可组合可回滚的功能,可灵活提供复杂的业务逻辑功能。

下面采用一个具体的实施例,对图1和图3所示方法实施例的技术方案进行详细说明。

以一个游戏的状态为例,图4为一种多状态串行状态机,如图4中所示,在串行状态机中,该串行状态机从初始化状态到终态之间一共包括七个状态:初始化状态、静止状态s1、在空中状态s2、跑的状态s3、静止射击状态s4、空中射击状态s5以及跑着射击状态s6,状态之间的箭头表示从前一状态到后一状态的事件,事件例如有:站、跳、移动等,这几个状态之间互相可以转化,其连接数是笛卡尔乘积,形成了比较复杂的状态机。结合图4,本发明实施例提供的一种状态机处理方法具体包括:

s201、确定状态机中的n个状态,n为正整数。

具体地,确定图4中的串行状态机从初态到终态之间一共包括七个状态:初始化状态、静止状态s1、在空中状态s2、跑的状态s3、静止射击状态s4、空中射击状态s5以及跑着射击状态s6,n为7。

s202、根据状态机对应的业务逻辑,将7个状态中可并行运行的状态分类。

可选的,根据状态机对应的业务逻辑,例如,本实施例中将这个游戏的状态进行分类,将7个状态中可并行运行的状态分为2类,包括射击状态a1和非射击状态a2,一类包括两个状态:射击状态a1和非射击状态a2,另一类包括三个状态:静止状态b1、在空中状态b2和跑的状态b3。

s203、将每一类的状态建立成一个子状态机,得到2个子状态机。

图5为对图4所示的串行状态机进行处理后得到的子状态机的示意图,如图5所示,处理后包括2个子状态机,子状态机1:包括射击状态a1和非射击状态a2,以及子状态机2:包括静止状态b1、在空中状态b2和跑的状态b3,状态之间的事件根据原业务逻辑确定。本实施例中,子状态机中的状态与原串行状态机中的状态没有一一对应的关系。

s204、并行运行子状态机1和子状态机2,将子状态机1和子状态机2的运行结果组合,得到所述状态机的运行结果。

具体地,并行运行子状态机1和子状态机2,例如在某一时刻,子状态机1运行结果为非射击状态a2,子状态机2的运行结果为静止状态b1,将子状态机1的状态和子状态机2的状态进行组合,为a2b1,即可得到该时刻状态机的运行结果为:静止状态,即为原串行状态机的状态-静止状态s1;

在某一时刻,子状态机1运行结果为非射击状态a2,子状态机2的运行结果为:在空中状态b2,将子状态机1的状态和子状态机2的状态进行组合,为a2b2,即可得到该时刻状态机的运行结果为:在空中状态,即为原串行状态机的状态-在空中状态s2;

在某一时刻,子状态机1运行结果为非射击状态a2,子状态机2的运行结果为:跑的状态b3,将子状态机1的状态和子状态机2的状态进行组合,为a2b3,即可得到该时刻状态机的运行结果为:跑的状态,即为原串行状态机的状态-跑的状态s3;

在某一时刻,子状态机1运行结果为射击状态a1,子状态机2的运行结果为:静止状态b1,将子状态机1的状态和子状态机2的状态进行组合,为a1b1,即可得到该时刻状态机的运行结果为:静止射击状态,即为原串行状态机的状态-静止射击状态s4;

在某一时刻,子状态机1运行结果为射击状态a1,子状态机2的运行结果为:在空中状态b2,将子状态机1的状态和子状态机2的状态进行组合,为a1b2,即可得到该时刻状态机的运行结果为:空中射击状态,即为原串行状态机的状态-空中射击状态s5;

在某一时刻,子状态机1运行结果为射击状态a1,子状态机2的运行结果为:在空中状态b3,将子状态机1的状态和子状态机2的状态进行组合,为a1b2,即可得到该时刻状态机的运行结果为:跑着射击状态,即为原串行状态机的状态-跑着射击状态s6。

如图5中所示,连接数代表两个状态之间的关系,连接数即为图中箭头的个数,全连接数为连接数的总数,子状态机1中的状态为2个,子状态机2中的状态为3个,图4所示的串行状态机中的状态为7个,图4所示的串行状态机中对应状态图的全连接数为24个,而图5所示的子状态机1的全连接数为2个,子状态机2的全连接数为4个,两个子状态机的全连接数的和为6个,全连接数由24个变为6个,可见状态数和对应状态图的全连接数都大为减少。可见,两个并行子状态机运行的结果状态与串行状态机的结果一致,但是子状态机中的状态数和对应状态图的全连接数都大为减少,因此便于维护。

图6为本发明实施例提供的一种状态机处理装置实施例的结构示意图,如图6所示,本实施例的装置可以包括:确定模块11、分类模块12、第一处理模块13和运行模块14,其中,确定模块11用于确定状态机中的n个状态,n为正整数。

分类模块12用于根据所述状态机对应的业务逻辑,将所述n个状态中可并行运行的状态分类。

第一处理模块13用于将每一类的状态建立成一个子状态机,每一子状态机包括至少两个状态和根据所述业务逻辑确定的事件。

运行模块14用于并行运行所有的子状态机,将所有的子状态机的运行结果组合,得到所述状态机的运行结果。

可选的,所述第一处理模块13用于:

若一类状态所包括的状态数为1,则建立子状态机时添加正常状态为状态数为1对应的子状态机中的初态。

本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。

本实施例提供的状态机处理装置,通过根据串行状态机得到多个并行的子状态机,子状态机之间互不影响,子状态机的运行结果可以组合,最终得到状态机的运行结果,相比串行状态机,子状态机中的状态数和对应状态图的全连接数都大大减少,减少了状态机需要维护的状态和事件,因此便于维护。

图7为本发明实施例提供的一种状态机处理装置实施例的结构示意图,如图7所示,本实施例的装置在图6所示装置的基础上,进一步地,还可以包括:第二处理模块15,第二处理模块,用于在所述状态机中添加堆栈,在每一子状态机中添加子堆栈,所述堆栈和所述子堆栈满足先进后出规则;

在进行状态迁移时,将迁移后的状态入栈存储。

进一步地,所述第二处理模块15还用于:

在进行状态回退时,将所述堆栈中后入栈的状态先进行出栈,直到栈底,得到所述堆栈中的所有状态;

将所述子堆栈中后入栈的状态先进行出栈,直到栈底,得到所述子堆栈中的所有状态。

本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理类似,此处不再赘述。

本实施例提供的状态机处理装置,通过在状态机中添加堆栈,在每一子状态机中添加子堆栈,堆栈和子堆栈满足先进后出规则,在进行状态迁移时,将迁移后的状态入栈存储,在进行状态回退时,将堆栈中后入栈的状态先进行出栈,直到栈底,得到堆栈中的所有状态,将子堆栈中后入栈的状态先进行出栈,直到栈底,得到子堆栈中的所有状态。从而可实现状态的回退,便于追踪到历史状态,当业务逻辑错误时,实现业务逻辑回滚。且同时具备可组合可回滚的功能,可灵活提供复杂的业务逻辑功能。

图8为本发明实施例提供的一种状态机处理装置实施例的结构示意图,如图8所示,本实施例的状态机处理装置可以包括:存储器201和处理器202,

存储器201,用于存储程序指令,该存储器可以是flash(闪存)。

处理器202,用于调用并执行存储器中的程序指令,以实现图1或图3所示的用于状态机处理方法中的各个步骤。具体可以参见前面方法实施例中的相关描述。

本实施例的状态机处理装置还可以包括输入/输出接口203。输入/输出接口203可以包括独立的输出接口和输入接口,也可以为集成输入和输出的集成接口。其中,输出接口用于输出数据,输入接口用于获取输入的数据,上述输出的数据为上述方法实施例中输出的统称,输入的数据为上述方法实施例中输入的统称。

本发明实施例还提供一种可读存储介质,可读存储介质中存储有计算机程序,当状态机处理装置的至少一个处理器执行该计算机程序时,状态机处理装置执行第一方面的状态机处理方法。

本发明实施例还提供一种程序产品,该程序产品包括计算机程序,该计算机程序存储在可读存储介质中。状态机处理装置的至少一个处理器可以从可读存储介质读取该计算机程序,至少一个处理器执行该计算机程序使得状态机处理装置实施第一方面的状态机处理方法。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

在上述装置的实施例中,应理解,处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1