1.本发明涉及计算机网络信号通讯技术领域,具体地说是一种基于对端网络信号的状态机状态转换方法及系统。
背景技术:2.在大规模集群的分布式系统中,系统在运行时各个模块可以有多种运行的状态,例如:就绪态、初始化态、运行态等。对于这种状态繁多且经常发生变化的系统,如何管理状态的流转是尤为重要的。鉴于此,系统可以引入有限状态机来更好地管理系统中各个模块的状态。有限状态机是一个可以模拟世界上大部分事务的数学模型,它是一个抽象机器,在任何时候都可以处于有限数量的状态之一。在收到某些外部输入之后,它可以从一个状态转换到另一个状态。在分布式系统中,可以引入有限状态机,将业务流程状态化,确定各个模块可能的状态和相应的触发事件与随之要发生的动作,在生命周期内进行控制与执行。
3.传统应用程序的控制流程大多数是顺序的,遵循事先设定的逻辑按照顺序执行。除非出现异常处理,否则很少有事件能改变标准的执行流程。另一类应用程序由外部发生的事件来驱动,也就是说,事件在程序之外生成,无法由应用程序来控制,具体执行的内容取决于接收到的事件以及模块的实时状态。而有限状态机可以采取某种操作来响应一个外部事件,同时还会更新模块的状态。在这种情况下,任何逻辑都可抽象成一系列事件和状态的组合。
4.现有技术中,多数状态机采用本端触发状态改变的机制,在系统运行中存在一定的限制。
5.故如何通过对端的网络信号驱动状态机的流转,完成系统内各个功能模块的状态切换是目前亟待解决的技术问题。
技术实现要素:6.本发明的技术任务是提供一种基于对端网络信号的状态机状态转换方法及系统,来解决如何通过对端的网络信号驱动状态机的流转,完成系统内各个功能模块的状态切换的问题。
7.本发明的技术任务是按以下方式实现的,一种基于对端网络信号的状态机状态转换方法,该方法是将本端系统分为主进程和父进程,由父进程拉起子进程,子进程内部包括若干线程;具体如下:
8.s1、当本端系统接收到对端系统的信号量变化时,本端系统的select模块会进行消息分拣;
9.s2、select模块将接收到的对端的信号进行消息转换,识别该信号对应的线程;其中,每个线程存在两种状态模式,即not ready和ready;not ready逐步向ready转态做相应的处理和转换,ready状态一旦不再ready时,重新跳回not ready的状态做循环处理;
10.s3、判断子进程内部所有线程的状态:
11.当且仅当子进程内部的所有线程为ready状态时,才会开启处理对应线程的动作。
12.作为优选,当且仅当子进程内部的所有线程为ready状态时,才会开启处理对应线程的动作具体如下:
13.当消息解析为更新子进程内部的任一线程,且该线程的状态为not ready时,对端请求的信号或数据存储到threads模块中,记录该条是来自该线程的数据,并作等待动作;
14.直到对应线程的状态为ready后,threads模块便会向该线程做数据处理。
15.更优地,所述select模块解析出的同一个信号变化只会触发一个线程做对应处理,不会存在同一个消息或信号触发两个环节共同变化的情况,因为这样会导致两个环节同时发生了变化,无法保证状态机的运转是否满足预期。
16.更优地,所述threads模块用于处理对端系统的信号和数据,并管理本端系统内的线程。
17.更优地,所述threads模块中设定线程触发策略,线程触发策略包括串行策略、顺时针策略和轮询顺序策略;其中,轮询数据策略的原则:本端系统内的线程轮询一遍且跳转时无重复。
18.更优地,当设定线程触发策略后,若其中一个线程出现问题,则本端系统将向该线程的前一线程做转态跃迁和状态校验,校验该线程的上一线程的处理是否在当前还符合预期:
19.若该线程的上一线程当前符合预期,则本端系统默认该线程的上一线程之前的所有线程转态此时仍然正确;同时该线程的上一线程重新执行一遍后,尝试继续向该线程做跳转;
20.若该线程的上一线程当前不符合预期,则本端系统会继续向该线程的上一线程的上一线程做转态跃迁和状态校验,直到有线程复合物当前预期位置。
21.作为优选,所述父进程与子进程之间状态转换关系具体如下:
22.线程实例化后进入初始化态,随后在收到启动信号后变为可运行态;
23.在可运行态中分为运行态和就绪态,当线程在执行任务时处于运行态,否则处于就绪态;
24.可运行态与等待态和阻塞态进行状态切换,当该线程需要其他线程的反馈时进入等待态,而当该线程处于i/o时处于阻塞态,当线程完成既定任务或主进程下发终止命令后,其进入终止态。
25.一种基于对端网络信号的状态机状态转换系统,该系统将本端系统分为主进程和父进程,由父进程拉起子进程,子进程内部包括若干线程;
26.本端系统内包括select模块和threads模块;
27.其中,select模块用于将接收到的对端的信号进行消息转换,识别该信号对应的线程;
28.threads模块用于处理对端系统的信号和数据,并管理本端系统内的线程。
29.一种电子设备,包括:存储器和至少一个处理器;
30.其中,所述存储器上存储有计算机程序;
31.所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于对端网络信号的状态机状态转换方法。
32.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的基于对端网络信号的状态机状态转换方法。
33.本发明的基于对端网络信号的状态机状态转换方法及系统具有以下优点:本发明采用对端的网络信号控制状态机的状态流转,即通过引入对端的网络信号来驱动状态机的流转以及各模块在状态转换过程中的自我修复功能,丰富了分布式系统的使用场景,增强了系统的稳定性。
附图说明
34.下面结合附图对本发明进一步说明。
35.附图1为父进程、子进程和线程关系示意图;
36.附图2为父进程与子进程之间状态转换关系示意图;
37.附图3为线程接收信号流转示意图;
38.附图4为状态机的循环示意图;
39.附图5为状态跃迁和状态校验示意图。
具体实施方式
40.参照说明书附图和具体实施例对本发明的基于对端网络信号的状态机状态转换方法及系统作以下详细地说明。
41.实施例1:
42.如附图1所示,本实施例提供了一种基于对端网络信号的状态机状态转换方法,该方法是将本端系统分为主进程和父进程,由父进程拉起子进程,子进程内部包括六个线程;如附图3所示,具体如下:
43.s1、当本端系统接收到对端系统的信号量变化时,本端系统的select模块会进行消息分拣;
44.s2、select模块将接收到的对端的信号进行消息转换,识别该信号对应的线程;其中,每个线程存在两种状态模式,即not ready和ready;not ready逐步向ready转态做相应的处理和转换,ready状态一旦不再ready时,重新跳回not ready的状态做循环处理;
45.s3、判断子进程内部所有线程的状态:
46.当且仅当子进程内部的所有线程为ready状态时,才会开启处理对应线程的动作。
47.本实施例中,当且仅当子进程内部的所有线程为ready状态时,才会开启处理对应线程的动作具体如下:
48.当消息解析为更新子进程内部的任一线程,且该线程的状态为not ready时,对端请求的信号或数据存储到threads模块中,记录该条是来自该线程的数据,并作等待动作;
49.直到对应线程的状态为ready后,threads模块便会向该线程做数据处理。
50.本实施例中的select模块解析出的同一个信号变化只会触发一个线程做对应处理,不会存在同一个消息或信号触发两个环节共同变化的情况,因为这样会导致两个环节同时发生了变化,无法保证状态机的运转是否满足预期。
51.本实施例中的threads模块用于处理对端系统的信号和数据,并管理本端系统内的线程。threads模块中设定线程触发策略,线程触发策略包括串行策略、顺时针策略和轮
询顺序策略;其中,轮询数据策略的原则:本端系统内的线程轮询一遍且跳转时无重复,如附图4所示。
52.如附图5所示,当设定线程触发策略后,若其中一个线程出现问题,则本端系统将向该线程的前一线程做转态跃迁和状态校验,校验该线程的上一线程的处理是否在当前还符合预期:
53.若该线程的上一线程当前符合预期,则本端系统默认该线程的上一线程之前的所有线程转态此时仍然正确;同时该线程的上一线程重新执行一遍后,尝试继续向该线程做跳转;
54.若该线程的上一线程当前不符合预期,则本端系统会继续向该线程的上一线程的上一线程做转态跃迁和状态校验,直到有线程复合物当前预期位置。
55.如附图2所示,本实施例中的父进程与子进程之间状态转换关系具体如下:
56.线程实例化后进入初始化态,随后在收到启动信号后变为可运行态;
57.在可运行态中分为运行态和就绪态,当线程在执行任务时处于运行态,否则处于就绪态;
58.可运行态与等待态和阻塞态进行状态切换,当该线程需要其他线程的反馈时进入等待态,而当该线程处于i/o时处于阻塞态,当线程完成既定任务或主进程下发终止命令后,其进入终止态。
59.实施例2:
60.如附图1和2所示,本实施例提供了一种基于对端网络信号的状态机状态转换系统,该系统将本端系统分为主进程和父进程,由父进程拉起子进程,子进程内部包括六个线程;线程实例化后进入初始化态,随后在收到启动信号后变为可运行态。在可运行态中分为运行态和就绪态,当线程在执行任务时处于运行态,否则处于就绪态。可运行态又可与等待态和阻塞态进行状态切换,当该线程需要其他线程的反馈时进入等待态,而当它处于i/o时处于阻塞态,当线程完成既定任务或主进程下发终止命令后,其进入终止态。
61.本端系统内包括select模块和threads模块;
62.其中,select模块用于将接收到的对端的信号进行消息转换,识别该信号对应的线程;
63.threads模块用于处理对端系统的信号和数据,并管理本端系统内的线程。
64.由于线程1到线程6分别完成了不同的功能,当本端系统接收到对端的信号量变化时,首先会进行一个消息分拣环节,如附图3所示。select模块会将接收到的网络信号进行消息转换,来识别出此时的消息对应的是哪个环节(线程)的功能。而每个环节(线程)都会大致存在着两种状态模式,即not ready和ready。由图描述可知,not ready会逐步向ready状态做相应的处理和转换,而ready状态一旦不再ready时,它又会重新跳回not ready的处理做循环处理。只有内部的环节(线程)为ready状态时才会开启处理对应的环节的动作。也就是说如果此时消息解析为更新线程1的处理的数据,但此时线程1未到ready状态时,对端请求的信号或数据会被threads这个模块暂存,并记录此条是来自线程1的数据,并作等待动作,直到线程1的状态ready后,threads模块才会向线程1做数据处理,别的线程处理亦是如此。同一个信号变化只会触发一个环节(线程)做对应的处理。不会存在同一个消息或信号触发两个环节共同变化的情况,因为这样会导致两个环节同时发生了变化,无法保证状
态机的运转是否满足预期。
65.如附图4所示,系统中有六个线程,分别处理六种系统功能。而这六种功能间通常会存在着依赖关系,即线程1的状态正常后会拉起线程2的处理,也就是说线程2是否能运转取决于线程1的状态是否正常。按照这个规律,顺时针顺序执行线程1到线程6。只有当线程6也处理正常启动状态后,整个系统才算是完成了正常启动的功能,整个系统也才正常运转。一旦某一环节(线程)出现了问题,(异常处理)系统将向它的前一个状态做状态跃迁和状态校验,检验上一状态的处理是否在当前还符合预期,如附图5所示。按照附图5描述可知,本端系统在启动线程6的时候遇到了故障,无法完成线程6的正常功能。此时无需人为干预,本端系统会自动向线程5转换,此时通过一些校验的流程和状态识别来检查是不是线程5也遇到了类似的问题,如果线程5此时功能正确,那本端系统会默认前四个线程此时仍然正确,会将线程5的功能重新执行一遍后尝试继续向线程6做跳转。如果线程5此时也发生了状态不对的情况,此时本端系统会认为前一个线程可能遇到了相同的问题,会接着尝试向线程4做变迁,即附图5所示,在极端状态下,本端系统会一步一步尝试逆时针完成前一线程量的处理,整个过程中是不需要人为介入的。
66.实施例3:
67.本实施例还提供了一种电子设备,包括:存储器和处理器;
68.其中,存储器存储计算机执行指令;
69.处理器执行所述存储器存储的计算机执行指令,使得处理器执行本发明任一实施例中的基于对端网络信号的状态机状态转换方法。
70.处理器可以是中央处理单元(cpu),还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通过处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
71.存储器可用于储存计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现电子设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器还可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,只能存储卡(smc),安全数字(sd)卡,闪存卡、至少一个磁盘存储期间、闪存器件、或其他易失性固态存储器件。
72.实施例4:
73.本实施例还提供了一种计算机可读存储介质,其中存储有多条指令,指令由处理器加载,使处理器执行本发明任一实施例中的基于对端网络信号的状态机状态转换方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
74.在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
75.用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、
cd-r、cd-rw、dvd-rom、dvd-rym、dvd-rw、dvd+rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
76.此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
77.此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
78.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。