一种线程流控方法和装置的制造方法

文档序号:8258157阅读:184来源:国知局
一种线程流控方法和装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,特别是涉及一种线程流控方法和装置。
【背景技术】
[0002]“高并发”现象(同时处理多个线程或多个进程)目前在很多大型的软件系统中普遍存在,比如大型的电子商务平台、电子购票系统等等,而且这种现象具有很强的突发性和破坏性。破坏性严重时会导致系统处于瘫痪状态而无法提供服务,OMC(Operat1n andMaintenance Center,操作维护中心)网管系统就面临着“告警风暴”的威胁,往往使得OMC系统无法正常运行。“告警风暴”是大量网元突发性同时上报告警的现象,这样会造成OMC系统会开启大量的线程处理这些告警消息。
[0003]但是如果OMC系统对于这种大量线程的“高并发”处理不当,就会出现顾此失彼的现象,容易出现由于系统资源紧缺造成系统瘫痪的问题。具体分析为:如每条告警均开启一个线程进行处理,这样会造成CPU或I/O (Input/Output,输入/输出)使用率的骤然升高,操作系统性能逐步下降;为了降低CPU的占用率,可以使用线程池的方式,对大量告警进行简单的“排队与同步”,但是线程池的处理能力往往与队列长度无法吻合,很容易因队列过长造成“内存溢出”问题。总之对于网元“告警风暴”的现象,OMC必须具备一定的容灾(当出现特殊异常情况时(比如告警风暴),软件系统应该具备自我保护的能力,异常事件不能够影响其正常运行状态)保护措施,以保证系统7*24小时不间断的稳定运行。
[0004]在网元设备正常运行的过程中,由于内部原因(CPU占用率高,任务多等原因)或外部原因(人为复位单板或者插拔)会发生故障,此时就会通过SNMP(Simple NetworkManagement Protocol,简单网络管理协议)向OMC系统上报一条告警消息。OMC系统接收到网元告警后转化为内部的JMS(Java Message Service, Java消息服务)消息,并将这条异步的JMS消息发送到“告警模块”处理,此时“告警模块”即会开启一个新线程来处理网元告警。
[0005]目前解决“高并发”问题的方案为直接采用多线程或线程池来进行处理:
[0006]目前OMC系统的“告警模块”处理告警消息的流程如下:首先告警接收器负责接收JMS告警消息,同时执行必要的过滤工作,然后告警接收器向告警处理模块发起处理请求。当出现“告警风暴”时,告警接收器要么并发无限多个线程,要么使用线程池开启一定数量的线程来向告警处理模块发起处理请求。在此,将告警接收器和告警处理模块分别概括为“业务请求层”和“业务处理层”,告警消息的请求处理方式如图1所示。在多线程并发方式(原始方式)中,业务请求层向业务处理层请求η个线程处理告警消息;在线程池方式(改进方式)中,业务请求层向J2EE标准线程池请求线程,由J2EE标准线程池根据自身线程的容量向业务处理层发起线程处理告警消息。
[0007]众所周知,当前众多软件系统(包括OMC系统)大多采用如图1所示的两种方式处理高并发的请求线程。其中,线程池通过线程复用的措施解决了大量线程并发的问题;较多线程并发在系统资源保护方面有很大程度的改进和优化,但是这两种处理并发请求的方式都存在缺陷,当出现大量的并发请求时,直接使用多线程并发的方式存在“无法控制线程数量”的问题,线程数量无限增大是重大的系统隐患;而“线程池”方式存在“线程数量范围不可动态调节”的问题,如果线程池的处理能力不能够最佳的处理这种“高并发”,将导致大量处理任务积压,从而可能出现内存溢出的问题。由此可见,上述两种处理高并发线程的方式的重要缺陷在于“不可管理”。

【发明内容】

[0008]本发明提供一种线程流控方法和装置,以解决现有的线程流控方案无法控制线程数量的问题。
[0009]为了解决上述问题,本发明公开了一种线程流控方法,包括:
[0010]接收并缓存至少一个线程请求任务至任务缓冲池中;
[0011]根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
[0012]其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
[0013]优选地,所述线程请求任务通过以下方式生成:
[0014]根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
[0015]优选地,所述方法还包括:
[0016]通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
[0017]判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
[0018]若大于等于,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
[0019]优选地,所述方法还包括:
[0020]通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
[0021]优选地,所述接收并缓存至少一个线程请求任务至任务缓冲池中之前,所述方法还包括:
[0022]注册所述管理接口,开启所述任务缓冲池监控线程;并
[0023]创建所述任务缓冲池,对所述信号量进行初始化操作。
[0024]相应地,本发明还公开了一种线程流控装置,包括:
[0025]任务接收模块,用于接收并缓存至少一个线程请求任务至任务缓冲池中;
[0026]任务调度模块,用于根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
[0027]其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
[0028]优选地,所述装置还包括:
[0029]任务生成模块,用于根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
[0030]优选地,所述装置还包括:
[0031]任务监控模块,用于通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
[0032]任务判断模块,用于判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
[0033]调整清除模块,用于若所述任务缓冲池中的线程请求任务的数量大于等于预先设定的任务缓冲池容量上限,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
[0034]优选地,所述装置还包括:
[0035]远程管理模块,用于通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
[0036]优选地,所述装置还包括:
[0037]初始化模块,用于在所述任务接收模块接收并缓存至少一个线程请求任务至任务缓冲池中之前,注册所述管理接口,开启所述任务缓冲池监控线程;并创建所述任务缓冲池,对所述信号量进行初始化操作。
[0038]与【背景技术】相比,本发明包括以下优点:
[0039]接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
【附图说明】
[0040]图1是【背景技术】中告警消息的请求处理方式示意图;
[0041]图2是本发明实施例中线程流控装置的工作示意图;
[0042]图3是本发明实施例中线程流控装置的软件结构示意图;
[0043]图4是本发明实施例中线程流控装置的通用性特征示意图;
[0044]图5是本发明实施例中线程流控装置与业务请求层和业务处理层之间的调用关系,以及自身内部的流程示意图;
[0045]图6是本发明实施例中线程流控装置与外部管理工具之间的交互时序示意图;
[0046]图7是本发明实施例一中的一种线程流控方法的流程图;
[0047]图8是本发明实施例二中的一种线程流控方法的流程图;
[0048]图9是本发明实施例三中的一种线程流控装置的结构图;
[0049]图10是本发明实施例四中的一种线程流控装置的结构图。
【具体实施方式】
[0050]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0051]本发明技术方案为一种通用而可靠的处理方案,充分弥补了现有技术方案的缺陷。
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1