首页> 中国专利> 状态机族的并发操作

状态机族的并发操作

摘要

本发明涉及一种用于在计算系统内并发操作状态机的方法和系统。生成一个或多个状态机族。每一族包括用于从该族外部接收服务请求和转发接收到的服务请求以进行服务的一个主状态机类型,和用于接收和服务所转发的服务请求的一个或多个协助状态机类型。将线程池分配给一个或多个状态机族。每个线程池专用于一个状态机族,并包括用于执行相应状态机族的主实例和协助实例的一个或多个线程。将一个或多个所生成的状态机族的状态机实例分配给所分配的线程池的相应线程以执行。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-02-02

    未缴年费专利权终止 IPC(主分类):G06F9/46 授权公告日:20070822 终止日期:20091207 申请日:20031106

    专利权的终止

  • 2008-08-27

    专利申请权、专利权的转移(专利权的转移) 变更前: 变更后: 登记生效日:20080718 申请日:20031106

    专利申请权、专利权的转移(专利权的转移)

  • 2007-08-22

    授权

    授权

  • 2006-02-22

    实质审查的生效

    实质审查的生效

  • 2005-12-28

    公开

    公开

说明书

技术领域

本发明涉及电信。具体而言,本发明涉及用于在计算系统内并发(concurrently)操作状态机的新的和改进的方法和系统。

背景技术

软件应用通常使用通过传递消息交互的状态机。状态机是一种软件组件,它维护定义其输入之间状态的数据,例如来自其它状态机或来自操作系统的消息,其在任意给定时间上响应于接收的输入的行为取决于其状态。在电信中,输入通常作为异步消息接收。状态机普及的原因在于状态自动机(state automata)已经被证明是在电信中实现信令应用时的功能强大的软件工程方法。由于异步信令应用的面向消息的特性,很自然地将其实现为状态机。

状态机的一个状态接受某些组的消息。每个接受的消息触发某个状态转移。如果接收到不属于该组接受消息的消息,它可能丢失,尽管例如在电信状态机应用中,通常可以存储消息以避免将它们丢失。

每个状态映射成某一组状态转移。状态转移包含将要执行的实际程序语句。当由当前状态和所接收的消息的正确组合激活状态转移时,将执行在该转移内包含的语句。转移函数将成对的状态消息映射成状态转移。多对状态消息可以映射成同一状态转移,这意味着同一状态转移可以在多个状态内活动。

状态机类型定义状态机的转移函数和状态转移的内容。状态机类型可以被实例化为单状态机实例或多状态机实例。

单状态机仅在小应用内有用。对于实现更复杂的应用来说,例如电信应用,具有同时工作的多个状态机是有用的。例如,在信令应用中,可能为每个会话分配一个状态机实例,可能存在将由信令应用处理的数以万计的会话。

因此,为了执行这些处理要求,状态机实例通常在多处理环境中由线程来执行。术语线程(thread)是公知的现有技术概念,是指独立地调度但是与其它线程共享单个地址空间的执行环境。

然而,每个状态机实例具有一个线程在技术上是不可行的,因为可能存在数千个状态机实例,操作系统并不支持这个数量的线程。例如,Linux设置每个过程(process)1024个线程的限制。而且,可能需要环境切换。术语环境切换(context switch)是指操作系统用于在过程和/或线程之间切换执行顺序的操作。环境切换是繁重和耗时的操作,因为在能够切换执行顺序之前,需要完全存储已经执行的过程和/或线程的状态,和相应地需要恢复将要执行的新过程和/或线程的状态。这些操作需要会消耗时钟周期的大量机器指令。

在现有技术中,已经通过多种方式解决了这些性能和系统资源使用的问题。例如,可以仅使用单线程。然而,这导致另一个问题,即当由线程运行的状态机实例进行阻塞调用(blocking call)时,例如从磁盘文件读取数据时,所有的状态机实例都阻塞。

US 6,167,423公开了另一种解决方案,其中提供一种称作“clique”的机制。将多个功能类似的状态机分组在一起,并为整个组分配线程。因为将要分组在一起的状态机具有类似的功能,这些状态机将频繁地相互通信。因而,为整个组分配公用的线程是适当的,因为将会避免环境切换。

然而,如从上文显然可以看出的,这一机制存在很大的缺点。如果该组的一个成员阻塞,则其它成员也将阻塞。此外,为了有用,该机制要求状态机的功能类似以便它们能够组合在一起。但在实际的实现中,很少出现这种情况。

因而,显然需要一种在计算系统内提供状态机并发操作的高效解决方案。

发明内容

本发明涉及一种用于在计算系统内并发操作状态机的方法和系统。生成一个或多个状态机族(family)。每一族包括用于从该族外部接收服务请求和转发接收到的服务请求以进行服务(service)的一个主(master)状态机类型,和用于接收和服务所转发的服务请求的一个或多个协助(hand)状态机类型。该协助状态机类型随后可以直接与服务请求者通信。主状态机类型被实例化(instantiate)为一个主实例(instance),至少一个协助状态机类型例如是一个或多个协助实例。每个主实例和协助实例具有它自己的消息队列。可以连续地一次一个消息地处理实例的消息队列内的一个或多个消息。一些协助实例可以主要辅助其它的协助实例。过程可以包含多个状态机族,所述族通常不同,不过过程还可以包含多个类似的状态机族。

将线程池分配给一个或多个所生成的状态机族。每个线程池专用于它分配给的状态机族,并包括用于执行相应状态机族的主实例和协助实例的一个或多个线程。

因此,用于执行给定线程池内的实例的线程总量通常小于在相应状态机族内的实例数量。

将一个或多个所生成的状态机族的状态机实例指派给所分配线程池的相应线程以执行。一个给定实例在任一给定时间上由不多于一个的线程执行,一个给定线程在任一给定时间上执行不多于一个实例。在本发明的环境下,术语线程池是指一组线程,该组线程中的每个线程并非专门分配以执行任一个状态机实例,而是调度每个线程以根据需要执行相应状态机族的状态机实例。

在本发明的一种实施例中,在运行时修改即增加或降低在给定状态机族内的协助状态机类型的数量。

在本发明的一种实施例中,在运行时修改即增加或降低给定线程池内的线程的数量。

在本发明的一种实施例中,在运行时修改即增加或降低在给定状态机族内的一个或多个协助状态机类型的协助实例的数量。

在本发明的一种实施例中,定义消息队列的最大大小。可以每个实例或每种类型地定义最大大小。还可以在生成族时或者对类型进行实例化时定义最大大小。

在本发明的一种实施例中,在完成对话之后释放所执行的线程。对话是指过程、状态机族和/或状态机实例之间的通信或消息交换。

在本发明的一种实施例中,在执行阻塞事务处理之后,例如在启动数据库操作之后,释放所执行的线程。

在本发明的一种实施例中,计算系统是SMP(对称多处理)系统。术语SMP是指由共享公用操作系统和存储器的多个处理器对程序的处理。在对称多处理中,处理器共享存储器和I/O总线或数据路径。操作系统的单个复本负责所有的处理器。在SMP系统内,可以每个处理器一个线程地同时执行线程。

在本发明的一种实施例中,操作系统是多处理操作系统,例如Linux或UNIX。

在本发明的一种实施例中,计算机系统是电信网络单元。

本发明提供用于与状态机相关的性能、系统资源使用和系统管理等多个相关问题的解决方案。本发明使用线程池提供状态机族的真正并发性。而且,当根据本发明结合状态机族使用线程池时,如果由线程执行的状态机实例进行阻塞调用,它并不阻塞整个状态机族。

与US 6,167,423的clique机制相比,本发明并不分组类似的状态机。因而,本发明并不需要状态机的功能类似性。在US 6,167,423中,将公用线程分配给一组状态机,而在本发明中,将多个线程的线程池分配给状态机族。在US 6,167,423中的一组状态机共享公用消息队列,而在本发明中,每个状态机实例具有它自己的消息队列。

本发明的状态机实例是可重新使用的,因为当给定状态机实例完成它的任务并“消失”时,当创建同一类型的另一个实例以执行另一个任务时将重新使用分配给它的资源。在本发明中,在给定时间上,每个状态机类型可以实例化为任意数量的实例,每个实例执行它自己的任务。

附图说明

包括以提供本发明的进一步理解和构成其说明书一部分的附图图示了本发明的实施例,并和说明书一起有助于解释本发明的原理。在附图中:

图1图示根据本发明一种实施例的用于并发操作状态机的方法;和

图2是图示根据本发明一种实施例的用于并发操组状态机的系统的方框图。

具体实施方式

现在,将详细参考本发明的实施例,这些实施例的例子在附图中图示。

图1图示一种在计算系统内并发操作状态机的方法。阶段10,生成一个或多个状态机族。每个族包括用于从其族外部接收服务请求和用于转发所接收的服务请求以进行服务的一个主状态机类型,和用于接收和服务所转发的服务请求的一个或多个协助状态机类型。协助状态机类型随后可以直接与服务请求者通信。主状态机类型实例化为一个主实例,至少一个协助状态机类型实例化为一个或多个协助实例。每个主实例和协助实例具有它自己的消息队列。

阶段11,将线程池分配给一个或多个所生成的状态机族。每个线程池专用于它所分配给的状态机族,并包括用于执行相应状态机族的主实例和协助实例的一个或多个线程。因而,在本发明的优选实施例中,给定线程池的线程并不专用于具体的主实例或协助实例。

在本发明的另一种优选实施例中,每个线程池专用于它所分配给的状态机族,并包括用于执行相应状态机族的主实例的线程和用于执行相应状态机族的协助实例的一个或多个线程。因而,给定线程池的线程专用于具体的主实例和协助实例。

阶段12,将一个或多个所生成的状态机族的状态机实例分配给所分配线程池的相应线程以便执行。一个给定实例在任一给定时间上由不超过一个的线程执行,一个给定线程在任一给定时间上执行不超过一个实例。因此,用于在给定线程池内执行实例的线程总量通常低于在相应状态机族内的实例总量。在本发明的描述中,术语线程池是指这样一组线程,其中每个线程并不专门分配来执行任意一个状态机实例,而是调度每个线程以根据需要执行相应状态机族的状态机实例。

一个族的启动可以包括下述步骤。一个族注册一个唯一的族ID。接着,使用协助类型的数量和线程池大小即线程数量来初始化该族。接着,初始化该族主类型。接着,初始化该组的协助类型。建立分别包括给定协助类型的协助对象的一个或多个协助池。最后,启动该族的主实例。随着该主实例接收到新服务请求,主实例从协助池中激活协助实例。状态机实例是激活的状态机对象。在运行时可以修改协助对象的数量。

在单个协助实例已经完成它的任务之后,停用该协助实例,并释放该协助实例占用的资源。在其激活和停用之间,协助实例可能已经在多个不同的线程之中运行,而不释放所述协助实例的生命周期特定的资源。当已经启动一个族时,它运行直到它的最后一个成员停止。当主实例已经停止时,该族通过等待直到所有成员已经停止来开始准备关闭。释放该族的资源,例如删除主实例和协助实例,并删除该族ID的线程池。在已经关闭该族时,可以取消注册该族。

图2图示一种用于在计算机系统SMP内并发运行状态机的系统。在图2所示的本发明的实施例中,计算系统是使用带有例如Linux作为操作系统的对称多处理的电信网络单元。

在图2所示的本发明的实施例中,该系统包括状态机族SMF。该族包括用于从其族的外部接收服务请求和用于转发所接收的服务请求以进行服务的一个主状态机类型MT。该族还包括用于接收和服务所转发的服务请求的三个协助状态机类型HT。主状态机类型被实例化为一个主实例MI,协助状态机类型实例化为协助实例HI。每个协助类型的协助实例的数量可以改变。每个实例具有它自己的消息队列MQ。可以一次一个消息地连续地处理一个实例的消息队列内的一个或多个消息。

应当指出图2所示的主状态机类型MT和协助状态机类型HT是概念实体而不是实际的软件/硬件单元。应当指出根据本发明的系统可以包括多个状态机族,尽管为了简明,在图2所示的本发明的实施例中仅图示了一个族。

在图2所示的本发明的实施例中,该系统还包括状态机族特定的线程池TP。线程池包括用于执行相应状态机族的主实例和协助实例的多个线程T。一个给定实例在任一给定时间上由不超过一个线程执行,一个给定线程在任一给定时间上执行不超过一个实例。同样应当指出,包括多个状态机族的根据本发明的系统最好还包括多个线程池,尽管为了简化,在图2所示的本发明的实施例中,仅图示了一个族和一个线程池。

在图2所示的本发明的实施例中,该系统还包括装置1,用于在运行时修改在给定状态机族内协助状态机类型的数量。因而,通过使用装置1,可以在运行时增加或降低在给定状态机族内协助状态机类型的数量。该系统还包括装置2,用于在运行时修改在给定线程池内的线程数量。因而,通过使用装置2,可以在运行时增加或降低在给定线程池内的线程数量。该系统还包括装置3,用于在运行时修改在给定状态机族内一个或多个协助状态机类型的协助实例的数量。因而,通过使用装置3,可以在运行时增加或降低在给定状态机族内一个或多个协助状态机类型的协助实例的数量。该系统还包括装置4,用于定义消息队列的最大大小。可以为每个实例或每个类型定义最大大小。也可以当生成这些族或当实例化状态机类型时进一步定义最大大小。该系统还包括装置5,用于在所述线程完成对话之后释放所执行的线程。该系统还包括装置6,用于在所述线程执行阻塞事务处理之后,例如在启动数据库操作之后释放所执行的线程。该系统还包括装置7,用于每个处理器一个线程地并发执行线程。

对于本领域的技术人员来说,随着技术的改进,显然可以以多种方式实现本发明的基本思想。本发明及其实施例因而并不限制于上述例子,相反,它们可以在权利要求的保护范围内改变。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号