一种呼叫事件并发处理方法

文档序号:7620821阅读:153来源:国知局
专利名称:一种呼叫事件并发处理方法
技术领域
本发明涉及多线程业务系统,尤指一种呼叫事件并发处理方法。
背景技术
多线程技术为业务在资源共享上提供了便利,但是多线程的资源共享导致并发控制一直是业界的一个难点。对于多线程执行环境的业务系统,每个呼叫的事件来自多个线程,而各线程之间存在资源竞争的问题。
现有技术中,一般是通过资源加锁的方式进行多线程控制。其基本原理是罗列出系统中的所有共享资源,当一个线程正在使用某资源时,给该资源加锁,直到该线程对该资源使用完毕后,释放锁,以便其它线程再使用该资源。
这种资源加锁方式,容易遗漏某些共享资源,导致系统执行紊乱;并且不断地对资源进行加锁或释放锁,同时对使用资源的线程进行排队和唤醒,这些因素导致开发这种多线程业务系统时,业务程序代码复杂,多个线程之间不断的进行切换,跟踪和控制都比较困难,容易出现问题且很难定位。

发明内容
本发明提供一种呼叫事件并发处理方法,用以解决现有技术中存在的呼叫事件多线程并发控制困难的问题。
本发明提供的呼叫事件并发处理方法,应用于多线程业务系统,包括在业务系统中建立多个事件队列,并设置每一个事件队列对应的事件执行线程,当业务系统收到呼叫事件后,执行下列步骤A1、将同一呼叫的事件分发到同一事件队列,并按收到事件的先后顺序依次放入事件队列中保存;
B1、事件执行线程按放入的先后顺序从事件队列取出事件,并调用相应业务逻辑执行。
根据本发明的上述方法,当业务系统收到呼叫事件后,通过事件分发器,将同一呼叫的事件分发到同一事件队列中。
所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法为给每一个事件队列设定队列标识;在事件分发器中存储呼叫标识与队列标识对照表;当事件分发器收到呼叫事件后,根据该事件所携带的呼叫标识查询所述对照表,将该事件放入与查询出的队列标识相对应的事件队列中。
所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法还可以为将事件队列从0开始进行连续编号;当事件分发器收到呼叫事件后,取出事件携带的呼叫标识,转换为正整型的呼叫ID;使用所述呼叫ID除以事件队列的总数,将得到的余数作为放入事件队列的序号;将该事件放入所述序号对应的事件队列中。
根据本发明的上述方法,当一个事件队列中的全部事件都已被取出执行完毕,对应的事件执行线程休眠;直到该事件队列中又被放入呼叫事件,对应的事件执行线程被唤醒,继续执行事件。
根据本发明的上述方法,设置系统支持的最大事件执行线程个数、以及每个事件队列存储的最大事件个数;系统根据当前接收的呼叫事件状况,动态增加事件队列及对应的事件执行线程,直到达到设置的最大事件执行线程个数。
根据本发明的上述方法,当系统预先设置的事件队列中存储的事件数量,达到最大事件个数时,新增一个或多个事件队列及对应的事件执行线程。
根据本发明的上述方法,还包括给新增事件队列设置标志;当系统接收到新的呼叫事件时,将该新的呼叫事件放入新增事件队列中。
所述将新的呼叫事件放入新增事件队列中,具体方法为系统收到新的呼叫事件时,查找出带有设置标志的新增事件队列,将该新的呼叫事件放入一个新增事件队列中;系统记录该新的呼叫事件的呼叫标识和放入的新增事件队列的标志信息,当系统接收到带有相同呼叫标识的呼叫事件时,将其放入具有相同标志的新增事件队列中。
根据本发明的上述方法,当系统当前事件队列执行线程已经达到设置的最大线程个数时,丢弃新的呼叫事件。
本发明有益效果如下本发明将同一个呼叫的事件放入一个呼叫队列中,而整个系统设置多个呼叫队列,给每一个呼叫队列对应设置一个事件执行线程,这样,同一个呼叫的所有事件由单线程顺序执行,不同呼叫可以由不同的线程并发执行。整个系统多线程执行保证了资源的利用,同一呼叫单线程执行避免了程序并发控制,既解决了多线程环境下呼叫的并发控制问题,又保证了系统性能。


图1为本发明事件呼叫、事件队列和事件执行线程的关系示意图;图2为呼叫事件的分发和执行流程图。
具体实施例方式
本发明通过事件队列和线程队列的控制来解决多线程环境下呼叫的并发控制问题。
在本发明方法中,系统提供多个事件队列和多个相应的事件执行线程,即每个事件队列由一个事件执行线程专门负责监控并取出事件执行,事件队列和事件执行线程是一对一的关系。本发明将每个呼叫的事件序列化,将属于同一个呼叫的事件放入同一个事件队列中顺序执行,但是多个呼叫可以共享一个事件队列,不同的呼叫事件可以放入多个不同的事件队列中,这样,整个业务系统是多线程执行,而每个呼叫是单线程执行。
呼叫、事件队列和线程的关系如图1所示。本发明采用事件分发器来将系统接收的呼叫事件分发到不同的事件队列中。事件分发器是所有呼叫事件的入口点,事件分发器接收呼叫事件后,依据设定的规则将接收的呼叫事件按顺序放入相应的事件队列的尾部,并保证属于同一个呼叫的所有事件都放入同一个事件队列中。如图1中的呼叫1和呼叫2的事件都放入事件队列1,呼叫3和呼叫4的事件都放入事件队列2,呼叫5和呼叫6的事件都放入事件队列N中。
给每个事件队列设置唯一一个事件执行线程,事件执行线程监控对应的事件队列,当事件队列中存储有事件时,取出事件队列头部中的事件,并调用与该事件对应的业务逻辑执行。如图1中,线程1监控和执行事件队列1中的呼叫事件,线程2监控和执行事件队列2中的呼叫事件,线程N监控和执行事件队列N中的呼叫事件。
事件分发器对呼叫事件进行分发的方法可以有很多种,只要保证同一个呼叫的事件放入同一个事件队列中即可。
下面举例说明具体的呼叫事件分发方法一给每一个事件队列设定队列标识;在事件分发器中存储呼叫标识与队列标识对照表;当事件分发器收到呼叫事件后,根据该事件所携带的呼叫标识查询所述对照表,将该事件放入与查询出的队列标识相对应的事件队列中。
在上述方法一中,需要预先在事件分发器中存储一个呼叫标识与队列标识对照表。其中的呼叫标识为业务系统可能收到的各种呼叫所携带的呼叫标识,队列标识为业务系统给设置的多个事件队列设定的标识信息。队列标识可以为数字序号,也可以是其它的标志信息,只要能区分不同的队列即可。
方法二将事件队列从0开始按数字顺序进行连续编号;当事件分发器收到呼叫事件后,取出事件携带的呼叫标识,转换为正整型的呼叫ID(身份标识);使用所述呼叫ID除以事件队列的总数,将得到的余数作为应分发事件队列的序号;将该事件放入所述序号对应的事件队列中。
方法二中呼叫事件的具体分发及执行流程如图2所示,包括下列步骤步骤1、事件分发器接收来自外部系统的呼叫事件(也可以是外部接口调用转换的呼叫事件);步骤2、事件分发器判断事件呼叫标识是否为正整数,如果不是,则进行转换,将呼叫标识映射为正整型的呼叫ID;步骤3、事件分发器根据上述事件分发算法得到放入事件队列序号;步骤4、事件分发器将该呼叫事件放入相应队列序号所指的事件队列中;步骤5、与事件队列对应的事件执行线程,取出队列头部中的事件;步骤6、事件执行线程取出事件后,调用该事件对应的业务逻辑执行;步骤7、一个事件被执行完毕后,事件执行线程继续监控该事件队列,如果事件队列中还存储有待执行的事件,则再从队列头部取出消息执行;当事件队列中无事件时,该线程休眠,直到队列中又被放入新的事件,该线程被唤醒,继续执行事件。
业务系统中的事件队列和事件执行线程的个数可以静态配置,也可以动态调整。
业务初始化时可根据系统的处理能力、资源配置,来设置事件队列个数和相对应的事件执行线程,以达到系统处理时资源的合理利用;在业务的运行过程中,可根据事件吞吐量对事件队列和事件执行线程进行动态调整,保证系统的最优化运行。
系统动态调整事件队列的方法如下业务可以根据系统本身的性能,设置系统最大支持的事件执行线程个数和每个事件队列最大存储的事件个数,在系统运行过程中,当接收到的呼叫事件较多,每个事件队列中的事件堆积数达到设置的事件队列最大存储事件个数,并且当前的事件执行线程个数小于设置的系统最大线程数时,系统增加一个或多个事件队列并为增加的事件队列启动响应的执行线程。
由于系统最初设置的事件队列已满,不能再放入新的呼叫事件,因此,若系统此时再接收到新的呼叫事件时,系统需要将该新的呼叫事件放入新增加的事件队列中,为此,系统给该新增加的一个或多个事件队列设置标志,以区别于系统最初设置的事件队列,并记录放入该新增事件队列的呼叫事件标识,当该新呼叫的后续事件到来时,保证属于同一呼叫的事件放入同一新增事件队列中。
当系统检测到最初设置的事件队列部分或全部空闲,可以按照预定的事件分发规则将接收的呼叫事件分发到最初设置的各事件队列中去。即新增的事件队列仅作为系统最初设置队列的一种补充,当系统有突发的呼叫事件高峰时,利用新增的事件队列分担一部分呼叫事件。当然,如果由于业务拓展,系统最初设置的事件队列个数和事件执行线程已不能满足业务要求,也可以静态修改系统设置的事件队列总数和对应事件执行线程。
当系统当前的事件队列执行线程数已经达到设置的最大线程数,而此时各个事件队列已满,则系统执行过负荷控制,丢弃新的呼叫,以保证系统的正常执行。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种呼叫事件并发处理方法,应用于多线程业务系统,包括在业务系统中建立多个事件队列,并设置每一个事件队列对应的事件执行线程,当业务系统收到呼叫事件后,执行下列步骤A1、将同一呼叫的事件分发到同一事件队列,并按收到事件的先后顺序依次放入事件队列中保存;B1、事件执行线程按放入的先后顺序从事件队列取出事件,并调用相应业务逻辑执行。
2.如权利要求1所述的方法,其特征在于,当业务系统收到呼叫事件后,通过事件分发器,将同一呼叫的事件分发到同一事件队列中。
3.如权利要求2所述的方法,其特征在于,所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法为给每一个事件队列设定队列标识;在事件分发器中存储呼叫标识与队列标识对照表;当事件分发器收到呼叫事件后,根据该事件所携带的呼叫标识查询所述对照表,将该事件放入与查询出的队列标识相对应的事件队列中。
4.如权利要求2所述的方法,其特征在于,所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法为将事件队列从0开始进行连续编号;当事件分发器收到呼叫事件后,取出事件携带的呼叫标识,转换为正整型的呼叫ID;使用所述呼叫ID除以事件队列的总数,将得到的余数作为放入事件队列的序号;将该事件放入所述序号对应的事件队列中。
5.如权利要求1所述的方法,其特征在于,当一个事件队列中的全部事件都已被取出执行完毕,对应的事件执行线程休眠;直到该事件队列中又被放入呼叫事件,对应的事件执行线程被唤醒,继续执行事件。
6.如权利要求1所述的方法,其特征在于,设置系统支持的最大事件执行线程个数、以及每个事件队列存储的最大事件个数;系统根据当前接收的呼叫事件状况,动态增加事件队列及对应的事件执行线程,直到达到设置的最大事件执行线程个数。
7.如权利要求6所述的方法,其特征在于,当系统预先设置的事件队列中存储的事件数量,达到最大事件个数时,新增一个或多个事件队列及对应的事件执行线程。
8.如权利要求7所述的方法,其特征在于,还包括给新增事件队列设置标志;当系统接收到新的呼叫事件时,将该新的呼叫事件放入新增事件队列中。
9.如权利要求8所述的方法,其特征在于,所述将新的呼叫事件放入新增事件队列中,具体方法为系统收到新的呼叫事件时,查找出带有设置标志的新增事件队列,将该新的呼叫事件放入一个新增事件队列中;系统记录该新的呼叫事件的呼叫标识和放入的新增事件队列的标志信息,当系统接收到带有相同呼叫标识的呼叫事件时,将其放入具有相同标志的新增事件队列中。
10.如权利要求7所述的方法,其特征在于,当系统当前事件队列执行线程已经达到设置的最大线程个数时,丢弃新的呼叫事件。
全文摘要
本发明公开了一种呼叫事件并发处理方法,应用于多线程业务系统,包括在业务系统中建立多个事件队列,并设置每一个事件队列对应一个事件执行线程,当业务系统收到呼叫事件后,执行下列步骤A1、将同一呼叫的事件分发到同一事件队列,并按收到事件的先后顺序依次放入事件队列中保存;B1、事件执行线程按放入的先后顺序从事件队列取出事件,并调用相应业务逻辑执行。本发明为多线程环境下呼叫的并发控制提供了一种简单、有效的处理方法。
文档编号H04Q3/64GK1874538SQ20051008505
公开日2006年12月6日 申请日期2005年7月20日 优先权日2005年7月20日
发明者沈庆春, 袁磊, 苗彩霞, 张文阁, 尚万军, 陈晓东 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1