CN1874538A - 一种呼叫事件并发处理方法 - Google Patents

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

Info

Publication number
CN1874538A
CN1874538A CN 200510085055 CN200510085055A CN1874538A CN 1874538 A CN1874538 A CN 1874538A CN 200510085055 CN200510085055 CN 200510085055 CN 200510085055 A CN200510085055 A CN 200510085055A CN 1874538 A CN1874538 A CN 1874538A
Authority
CN
China
Prior art keywords
event
incident
call
event queue
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200510085055
Other languages
English (en)
Other versions
CN100488265C (zh
Inventor
沈庆春
袁磊
苗彩霞
张文阁
尚万军
陈晓东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2005100850558A priority Critical patent/CN100488265C/zh
Publication of CN1874538A publication Critical patent/CN1874538A/zh
Application granted granted Critical
Publication of CN100488265C publication Critical patent/CN100488265C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Telephonic Communication Services (AREA)

Abstract

本发明公开了一种呼叫事件并发处理方法,应用于多线程业务系统,包括:在业务系统中建立多个事件队列,并设置每一个事件队列对应一个事件执行线程,当业务系统收到呼叫事件后,执行下列步骤:A1、将同一呼叫的事件分发到同一事件队列,并按收到事件的先后顺序依次放入事件队列中保存;B1、事件执行线程按放入的先后顺序从事件队列取出事件,并调用相应业务逻辑执行。本发明为多线程环境下呼叫的并发控制提供了一种简单、有效的处理方法。

Description

一种呼叫事件并发处理方法
技术领域
本发明涉及多线程业务系统,尤指一种呼叫事件并发处理方法。
背景技术
多线程技术为业务在资源共享上提供了便利,但是多线程的资源共享导致并发控制一直是业界的一个难点。对于多线程执行环境的业务系统,每个呼叫的事件来自多个线程,而各线程之间存在资源竞争的问题。
现有技术中,一般是通过资源加锁的方式进行多线程控制。其基本原理是:罗列出系统中的所有共享资源,当一个线程正在使用某资源时,给该资源加锁,直到该线程对该资源使用完毕后,释放锁,以便其它线程再使用该资源。
这种资源加锁方式,容易遗漏某些共享资源,导致系统执行紊乱;并且不断地对资源进行加锁或释放锁,同时对使用资源的线程进行排队和唤醒,这些因素导致开发这种多线程业务系统时,业务程序代码复杂,多个线程之间不断的进行切换,跟踪和控制都比较困难,容易出现问题且很难定位。
发明内容
本发明提供一种呼叫事件并发处理方法,用以解决现有技术中存在的呼叫事件多线程并发控制困难的问题。
本发明提供的呼叫事件并发处理方法,应用于多线程业务系统,包括:在业务系统中建立多个事件队列,并设置每一个事件队列对应的事件执行线程,当业务系统收到呼叫事件后,执行下列步骤:
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、一个事件被执行完毕后,事件执行线程继续监控该事件队列,如果事件队列中还存储有待执行的事件,则再从队列头部取出消息执行;当事件队列中无事件时,该线程休眠,直到队列中又被放入新的事件,该线程被唤醒,继续执行事件。
业务系统中的事件队列和事件执行线程的个数可以静态配置,也可以动态调整。
业务初始化时可根据系统的处理能力、资源配置,来设置事件队列个数和相对应的事件执行线程,以达到系统处理时资源的合理利用;在业务的运行过程中,可根据事件吞吐量对事件队列和事件执行线程进行动态调整,保证系统的最优化运行。
系统动态调整事件队列的方法如下:业务可以根据系统本身的性能,设置系统最大支持的事件执行线程个数和每个事件队列最大存储的事件个数,在系统运行过程中,当接收到的呼叫事件较多,每个事件队列中的事件堆积数达到设置的事件队列最大存储事件个数,并且当前的事件执行线程个数小于设置的系统最大线程数时,系统增加一个或多个事件队列并为增加的事件队列启动响应的执行线程。
由于系统最初设置的事件队列已满,不能再放入新的呼叫事件,因此,若系统此时再接收到新的呼叫事件时,系统需要将该新的呼叫事件放入新增加的事件队列中,为此,系统给该新增加的一个或多个事件队列设置标志,以区别于系统最初设置的事件队列,并记录放入该新增事件队列的呼叫事件标识,当该新呼叫的后续事件到来时,保证属于同一呼叫的事件放入同一新增事件队列中。
当系统检测到最初设置的事件队列部分或全部空闲,可以按照预定的事件分发规则将接收的呼叫事件分发到最初设置的各事件队列中去。即:新增的事件队列仅作为系统最初设置队列的一种补充,当系统有突发的呼叫事件高峰时,利用新增的事件队列分担一部分呼叫事件。当然,如果由于业务拓展,系统最初设置的事件队列个数和事件执行线程已不能满足业务要求,也可以静态修改系统设置的事件队列总数和对应事件执行线程。
当系统当前的事件队列执行线程数已经达到设置的最大线程数,而此时各个事件队列已满,则系统执行过负荷控制,丢弃新的呼叫,以保证系统的正常执行。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1、一种呼叫事件并发处理方法,应用于多线程业务系统,包括:在业务系统中建立多个事件队列,并设置每一个事件队列对应的事件执行线程,当业务系统收到呼叫事件后,执行下列步骤:
A1、将同一呼叫的事件分发到同一事件队列,并按收到事件的先后顺序依次放入事件队列中保存;
B1、事件执行线程按放入的先后顺序从事件队列取出事件,并调用相应业务逻辑执行。
2、如权利要求1所述的方法,其特征在于,当业务系统收到呼叫事件后,通过事件分发器,将同一呼叫的事件分发到同一事件队列中。
3、如权利要求2所述的方法,其特征在于,所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法为:
给每一个事件队列设定队列标识;
在事件分发器中存储呼叫标识与队列标识对照表;
当事件分发器收到呼叫事件后,根据该事件所携带的呼叫标识查询所述对照表,将该事件放入与查询出的队列标识相对应的事件队列中。
4、如权利要求2所述的方法,其特征在于,所述通过事件分发器,将同一呼叫的事件分发到同一事件队列中,具体方法为:
将事件队列从0开始进行连续编号;
当事件分发器收到呼叫事件后,取出事件携带的呼叫标识,转换为正整型的呼叫ID;
使用所述呼叫ID除以事件队列的总数,将得到的余数作为放入事件队列的序号;
将该事件放入所述序号对应的事件队列中。
5、如权利要求1所述的方法,其特征在于,当一个事件队列中的全部事件都已被取出执行完毕,对应的事件执行线程休眠;直到该事件队列中又被放入呼叫事件,对应的事件执行线程被唤醒,继续执行事件。
6、如权利要求1所述的方法,其特征在于,设置系统支持的最大事件执行线程个数、以及每个事件队列存储的最大事件个数;系统根据当前接收的呼叫事件状况,动态增加事件队列及对应的事件执行线程,直到达到设置的最大事件执行线程个数。
7、如权利要求6所述的方法,其特征在于,当系统预先设置的事件队列中存储的事件数量,达到最大事件个数时,新增一个或多个事件队列及对应的事件执行线程。
8、如权利要求7所述的方法,其特征在于,还包括给新增事件队列设置标志;当系统接收到新的呼叫事件时,将该新的呼叫事件放入新增事件队列中。
9、如权利要求8所述的方法,其特征在于,所述将新的呼叫事件放入新增事件队列中,具体方法为:
系统收到新的呼叫事件时,查找出带有设置标志的新增事件队列,将该新的呼叫事件放入一个新增事件队列中;
系统记录该新的呼叫事件的呼叫标识和放入的新增事件队列的标志信息,当系统接收到带有相同呼叫标识的呼叫事件时,将其放入具有相同标志的新增事件队列中。
10、如权利要求7所述的方法,其特征在于,当系统当前事件队列执行线程已经达到设置的最大线程个数时,丢弃新的呼叫事件。
CNB2005100850558A 2005-07-20 2005-07-20 一种呼叫事件并发处理方法 Expired - Fee Related CN100488265C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100850558A CN100488265C (zh) 2005-07-20 2005-07-20 一种呼叫事件并发处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100850558A CN100488265C (zh) 2005-07-20 2005-07-20 一种呼叫事件并发处理方法

Publications (2)

Publication Number Publication Date
CN1874538A true CN1874538A (zh) 2006-12-06
CN100488265C CN100488265C (zh) 2009-05-13

Family

ID=37484752

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100850558A Expired - Fee Related CN100488265C (zh) 2005-07-20 2005-07-20 一种呼叫事件并发处理方法

Country Status (1)

Country Link
CN (1) CN100488265C (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101826003A (zh) * 2010-04-16 2010-09-08 中兴通讯股份有限公司 多线程处理方法和装置
CN101499926B (zh) * 2008-12-22 2011-05-18 上海全景数字技术有限公司 用于互联boss系统和网管系统的方法
CN1988684B (zh) * 2006-12-15 2011-08-10 华为技术有限公司 网络进程管理方法及装置
CN102789394A (zh) * 2011-05-19 2012-11-21 阿里巴巴集团控股有限公司 一种并行处理消息的方法、装置、节点及服务器集群
CN103049246A (zh) * 2012-12-05 2013-04-17 北京奇虎科技有限公司 一种矩阵数据元素标识连续化方法和系统
CN101882089B (zh) * 2009-05-07 2013-05-08 中兴通讯股份有限公司 一种采用多线程处理业务会话应用的方法及装置
CN103530173A (zh) * 2012-07-06 2014-01-22 上海宝信软件股份有限公司 动态权重事件处理系统和方法
CN103810072A (zh) * 2012-11-09 2014-05-21 上海飞田通信技术有限公司 保障多线程任务有序执行的装置及方法
CN104166589A (zh) * 2013-05-17 2014-11-26 阿里巴巴集团控股有限公司 一种心跳包的处理方法和装置
CN104572036A (zh) * 2013-10-12 2015-04-29 腾讯科技(深圳)有限公司 事件的处理方法及装置
CN104714782A (zh) * 2012-12-05 2015-06-17 北京奇虎科技有限公司 一种矩阵数据元素标识连续化方法和系统
CN104932946A (zh) * 2009-07-28 2015-09-23 瑞典爱立信有限公司 用于处理电信网络中的事件的设备和方法
CN105991416A (zh) * 2015-02-15 2016-10-05 无锡北邮感知技术产业研究院有限公司 一种消息传递方法及消息传递中间件
CN106155794A (zh) * 2016-07-21 2016-11-23 浙江大华技术股份有限公司 一种应用于多线程系统中的事件分配方法及装置
CN108462682A (zh) * 2017-02-22 2018-08-28 成都鼎桥通信技术有限公司 初始对话协议sip消息的分发方法和装置
CN113407320A (zh) * 2021-06-17 2021-09-17 安科讯(福建)科技有限公司 一种基于5g小基站的mac层调度方法及终端

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1988684B (zh) * 2006-12-15 2011-08-10 华为技术有限公司 网络进程管理方法及装置
CN101499926B (zh) * 2008-12-22 2011-05-18 上海全景数字技术有限公司 用于互联boss系统和网管系统的方法
CN101882089B (zh) * 2009-05-07 2013-05-08 中兴通讯股份有限公司 一种采用多线程处理业务会话应用的方法及装置
CN104932946A (zh) * 2009-07-28 2015-09-23 瑞典爱立信有限公司 用于处理电信网络中的事件的设备和方法
WO2011127716A1 (zh) * 2010-04-16 2011-10-20 中兴通讯股份有限公司 多线程处理方法和装置
CN101826003A (zh) * 2010-04-16 2010-09-08 中兴通讯股份有限公司 多线程处理方法和装置
CN102789394A (zh) * 2011-05-19 2012-11-21 阿里巴巴集团控股有限公司 一种并行处理消息的方法、装置、节点及服务器集群
CN102789394B (zh) * 2011-05-19 2014-12-24 阿里巴巴集团控股有限公司 一种并行处理消息的方法、装置、节点及服务器集群
CN103530173A (zh) * 2012-07-06 2014-01-22 上海宝信软件股份有限公司 动态权重事件处理系统和方法
CN103530173B (zh) * 2012-07-06 2018-07-17 上海宝信软件股份有限公司 动态权重事件处理系统和方法
CN103810072A (zh) * 2012-11-09 2014-05-21 上海飞田通信技术有限公司 保障多线程任务有序执行的装置及方法
CN103049246A (zh) * 2012-12-05 2013-04-17 北京奇虎科技有限公司 一种矩阵数据元素标识连续化方法和系统
CN104714782A (zh) * 2012-12-05 2015-06-17 北京奇虎科技有限公司 一种矩阵数据元素标识连续化方法和系统
CN104714782B (zh) * 2012-12-05 2017-12-08 北京奇虎科技有限公司 一种矩阵数据元素标识连续化方法和系统
CN104166589A (zh) * 2013-05-17 2014-11-26 阿里巴巴集团控股有限公司 一种心跳包的处理方法和装置
CN104572036A (zh) * 2013-10-12 2015-04-29 腾讯科技(深圳)有限公司 事件的处理方法及装置
CN104572036B (zh) * 2013-10-12 2020-08-11 腾讯科技(深圳)有限公司 事件的处理方法及装置
CN105991416A (zh) * 2015-02-15 2016-10-05 无锡北邮感知技术产业研究院有限公司 一种消息传递方法及消息传递中间件
CN106155794A (zh) * 2016-07-21 2016-11-23 浙江大华技术股份有限公司 一种应用于多线程系统中的事件分配方法及装置
CN106155794B (zh) * 2016-07-21 2019-11-19 浙江大华技术股份有限公司 一种应用于多线程系统中的事件分配方法及装置
CN108462682A (zh) * 2017-02-22 2018-08-28 成都鼎桥通信技术有限公司 初始对话协议sip消息的分发方法和装置
CN113407320A (zh) * 2021-06-17 2021-09-17 安科讯(福建)科技有限公司 一种基于5g小基站的mac层调度方法及终端
CN113407320B (zh) * 2021-06-17 2023-08-11 安科讯(福建)科技有限公司 一种基于5g小基站的mac层调度方法及终端

Also Published As

Publication number Publication date
CN100488265C (zh) 2009-05-13

Similar Documents

Publication Publication Date Title
CN1874538A (zh) 一种呼叫事件并发处理方法
CN1266590C (zh) 面向构件基于系统内核的进程池/线程池管理方法
CN1302387C (zh) 执行电子装置中应用程序对话的方法和系统以及电子装置
US20030233485A1 (en) Event queue
CN101055533A (zh) 一种多线程处理器动态内存管理系统及方法
CN1856148A (zh) 通信系统中业务处理资源的管理方法
CN1271524C (zh) 一种静态内存管理方法
CN1684040A (zh) 能够使用过去处理空间的信息处理器
CN1801101A (zh) Java操作系统中线程的实现和线程状态切换的方法
CN1604051A (zh) 用于通过面向对象的程序执行动态内存管理的方法和设备
CN1873615A (zh) 一种定时器任务服务方法
CN1818875A (zh) 嵌入式操作系统分组硬实时任务调度的实现方法
CN102207890A (zh) 一种任务信息处理方法及调度控制处理装置
CN1549108A (zh) 一种实现通信过程零拷贝消息队列的方法
CN100351799C (zh) 嵌入式实时操作系统中基于消息对象的任务间通信方法
CN1315045C (zh) 一种对机群实现集中并发管理的方法
CN100351792C (zh) 一种实时任务管理与调度方法
CN1852131A (zh) 一种定时器调度方法
US20230409391A1 (en) Thread priority adjusting method, terminal, and computer-readable storage medium
CN1855067A (zh) 一种实时操作系统中任务挂起状态监控方法
CN1881895A (zh) 一种网络管理系统中的设备操作方法
CN1277196C (zh) 一种实现计算机系统应用服务器的方法
CN1737764A (zh) 支持osek标准的嵌入式实时操作系统的任务调度方法
CN101060559A (zh) 一种人机命令队列管理系统和方法
CN1873610A (zh) 支持多线程处理器的缓存器收集机制及其收集方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090513

Termination date: 20120720