CN104572277A - 一种线程流控方法和装置 - Google Patents
一种线程流控方法和装置 Download PDFInfo
- Publication number
- CN104572277A CN104572277A CN201410790566.9A CN201410790566A CN104572277A CN 104572277 A CN104572277 A CN 104572277A CN 201410790566 A CN201410790566 A CN 201410790566A CN 104572277 A CN104572277 A CN 104572277A
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- buffer pool
- semaphore
- request
- 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
Links
Landscapes
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种线程流控方法和装置,其中,所述方法包括:接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。本发明技术方案实现了线程数量的可控,可以最大限度的利用系统资源。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种线程流控方法和装置。
背景技术
“高并发”现象(同时处理多个线程或多个进程)目前在很多大型的软件系统中普遍存在,比如大型的电子商务平台、电子购票系统等等,而且这种现象具有很强的突发性和破坏性。破坏性严重时会导致系统处于瘫痪状态而无法提供服务,OMC(Operation and Maintenance Center,操作维护中心)网管系统就面临着“告警风暴”的威胁,往往使得OMC系统无法正常运行。“告警风暴”是大量网元突发性同时上报告警的现象,这样会造成OMC系统会开启大量的线程处理这些告警消息。
但是如果OMC系统对于这种大量线程的“高并发”处理不当,就会出现顾此失彼的现象,容易出现由于系统资源紧缺造成系统瘫痪的问题。具体分析为:如每条告警均开启一个线程进行处理,这样会造成CPU或I/O(Input/Output,输入/输出)使用率的骤然升高,操作系统性能逐步下降;为了降低CPU的占用率,可以使用线程池的方式,对大量告警进行简单的“排队与同步”,但是线程池的处理能力往往与队列长度无法吻合,很容易因队列过长造成“内存溢出”问题。总之对于网元“告警风暴”的现象,OMC必须具备一定的容灾(当出现特殊异常情况时(比如告警风暴),软件系统应该具备自我保护的能力,异常事件不能够影响其正常运行状态)保护措施,以保证系统7*24小时不间断的稳定运行。
在网元设备正常运行的过程中,由于内部原因(CPU占用率高,任务多等原因)或外部原因(人为复位单板或者插拔)会发生故障,此时就会通过SNMP(Simple Network Management Protocol,简单网络管理协议)向OMC系统上报一条告警消息。OMC系统接收到网元告警后转化为内部的JMS(Java Message Service,Java消息服务)消息,并将这条异步的JMS消息发送到“告警模块”处理,此时“告警模块”即会开启一个新线程来处理网元告警。
目前解决“高并发”问题的方案为直接采用多线程或线程池来进行处理:
目前OMC系统的“告警模块”处理告警消息的流程如下:首先告警接收器负责接收JMS告警消息,同时执行必要的过滤工作,然后告警接收器向告警处理模块发起处理请求。当出现“告警风暴”时,告警接收器要么并发无限多个线程,要么使用线程池开启一定数量的线程来向告警处理模块发起处理请求。在此,将告警接收器和告警处理模块分别概括为“业务请求层”和“业务处理层”,告警消息的请求处理方式如图1所示。在多线程并发方式(原始方式)中,业务请求层向业务处理层请求n个线程处理告警消息;在线程池方式(改进方式)中,业务请求层向J2EE标准线程池请求线程,由J2EE标准线程池根据自身线程的容量向业务处理层发起线程处理告警消息。
众所周知,当前众多软件系统(包括OMC系统)大多采用如图1所示的两种方式处理高并发的请求线程。其中,线程池通过线程复用的措施解决了大量线程并发的问题;较多线程并发在系统资源保护方面有很大程度的改进和优化,但是这两种处理并发请求的方式都存在缺陷,当出现大量的并发请求时,直接使用多线程并发的方式存在“无法控制线程数量”的问题,线程数量无限增大是重大的系统隐患;而“线程池”方式存在“线程数量范围不可动态调节”的问题,如果线程池的处理能力不能够最佳的处理这种“高并发”,将导致大量处理任务积压,从而可能出现内存溢出的问题。由此可见,上述两种处理高并发线程的方式的重要缺陷在于“不可管理”。
发明内容
本发明提供一种线程流控方法和装置,以解决现有的线程流控方案无法控制线程数量的问题。
为了解决上述问题,本发明公开了一种线程流控方法,包括:
接收并缓存至少一个线程请求任务至任务缓冲池中;
根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
优选地,所述线程请求任务通过以下方式生成:
根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
优选地,所述方法还包括:
通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
若大于等于,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
优选地,所述方法还包括:
通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
优选地,所述接收并缓存至少一个线程请求任务至任务缓冲池中之前,所述方法还包括:
注册所述管理接口,开启所述任务缓冲池监控线程;并
创建所述任务缓冲池,对所述信号量进行初始化操作。
相应地,本发明还公开了一种线程流控装置,包括:
任务接收模块,用于接收并缓存至少一个线程请求任务至任务缓冲池中;
任务调度模块,用于根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
优选地,所述装置还包括:
任务生成模块,用于根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
优选地,所述装置还包括:
任务监控模块,用于通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
任务判断模块,用于判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
调整清除模块,用于若所述任务缓冲池中的线程请求任务的数量大于等于预先设定的任务缓冲池容量上限,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
优选地,所述装置还包括:
远程管理模块,用于通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
优选地,所述装置还包括:
初始化模块,用于在所述任务接收模块接收并缓存至少一个线程请求任务至任务缓冲池中之前,注册所述管理接口,开启所述任务缓冲池监控线程;并创建所述任务缓冲池,对所述信号量进行初始化操作。
与背景技术相比,本发明包括以下优点:
接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
附图说明
图1是背景技术中告警消息的请求处理方式示意图;
图2是本发明实施例中线程流控装置的工作示意图;
图3是本发明实施例中线程流控装置的软件结构示意图;
图4是本发明实施例中线程流控装置的通用性特征示意图;
图5是本发明实施例中线程流控装置与业务请求层和业务处理层之间的调用关系,以及自身内部的流程示意图;
图6是本发明实施例中线程流控装置与外部管理工具之间的交互时序示意图;
图7是本发明实施例一中的一种线程流控方法的流程图;
图8是本发明实施例二中的一种线程流控方法的流程图;
图9是本发明实施例三中的一种线程流控装置的结构图;
图10是本发明实施例四中的一种线程流控装置的结构图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明技术方案为一种通用而可靠的处理方案,充分弥补了现有技术方案的缺陷。在本方案中可以使用“高并发线程流控装置”来处理JAVA应用程序(如OMC网管系统)的多线程并发请求,采用此装置的优点在于:通过人工干预调节可以使得系统高效地处理缓存任务,同时此装置具备自我保护能力,并发请求如果超限则立刻进行任务清理工作。下面详细介绍本技术方案的设计原理和特点,工作示意图如图2所示。
高并发线程流控装置主要由“流控管理器”、“任务缓冲池”、“任务调度器”以及“滑动式信号量”四个组件模块组成,同时还附带一个“抽象任务”对象。
“抽象任务”对象中定义了任务的基本属性和执行请求接口,业务请求层必须继承此抽象任务并实现请求接口,这样就实例化了一个具体的任务对象(任务实体);通过此方法业务请求层将自己的线程请求转化为线程流控装置的一个具体任务,此时就可以将此任务放入“任务缓冲池”中待执行,由此可见“任务缓冲池”承担了缓存待执行任务的重要角色;“任务调度器”的唯一职责就是从“任务缓冲池”中获取任务并开启并发线程执行任务,在无任务执行时它不会开启任何执行线程以节约资源,它是唯一与业务处理层交换的组件模块;任务调度器能够并发的执行线程数量由滑动式信号量开关来控制,开启的线程数量等于当前信号量的数量,且可动态调节。滑动式信号量开关的作用就是适时调节并发线程的数量,最大限度的协调“任务缓冲池”和“任务调度器”之间的工作,能够合理使用系统的CPU和内存资源;“流控管理器”是“任务缓冲池”、“任务调度器”和“滑动式信号量”的管理者,同时对外提供了用于远程管理的MBean(描述一个可管理的资源,是一个java对象)接口,它是线程流控装置“可控、可管理”的具体体现。“流控管理器”一方面负责任务缓冲池容量超限的实时监控与清理工作,另一方面承担其他模块的管理工作,比如当需要调整信号量大小时,流控管理器可以滑动方式(增加或减少一个信号量粒度)微调信号量大小,启动时流控管理器负责整个装置的初始化工作以及任务调度器的启动。同时当线程流控装置需要手动干预时,JVM(Java Virtual Machine,Java虚拟机)管理终端工具通过JMX(Java Management Extensions,JAVA管理扩展)协议与流控管理器建立远程连接,调用其相关管理接口实现对其他模块的远程管理,这些操作包括:滑动信号量,手动清理任务池、手动启动/停止任务调度器等操作。
本发明技术方案中的线程流控装置可以给予JVM开发,可以是OP(OSSPlatform)平台中的一个通用独立模块。OP平台是基于成熟的JavaEE技术实现,包括基础性工具、通用协议、消息组件、缓存组件、数据库组件、日志、安全、系统管理等通用模块,并提供大量支撑网管业务开发的API(Application Programming Interface,应用程序编程接口)供开发者使用。线程流控装置的软件结构如图3所示,在技术应用方面,任务缓冲池采用阻塞队列实现,任务排队策略采用“先进先出”方式,这样就保证了请求任务被执行的正确顺序;信号量控制采用Semaphore(信号灯,多线程环境下的一种设施,负责协调各个线程,以保证它们能够正确、合理的使用公共资源)对象实现,它可以很好的控制某个资源(线程)可被同时访问的个数,动态调整其许可证量,可以达到信号量“滑动”窗口效果;抽象任务对象实现JavaEE的Callable(动态链接库被外部程序调用的技术)接口,其中Callable方法用于业务请求层封装具体的业务处理过程;任务调度器的主线程只有一个,此线程时刻监测任务缓冲池中是否有待执行的任务,无任务执行时主线程一直被阻塞,否则被任务缓冲池唤醒后启动工作线程执行任务;流控管理器提供以上所有模块的管理接口,并将这些管理接口方法注册进JVM的MBServer服务中,这样就可以方便任何第三方工具采用JMX协议建连后远程管理流控装置。
系统的容量是有限的,承受的并发量也是有限的,在架构设计时一定需要考虑流量的控制,防止瞬时并发量的冲击导致系统崩溃。在设计时增加流控的措施,可考虑对请求进行排队,超出预期的范围,可以进行告警或者丢弃。因此本发明技术方案的重点是解决并发线程的可控,可管理问题,当出现线程高并发时,如果超出系统处理能力,系统具有自我保护措施或者人工可以参与管理,通过此种方式以达到系统的容灾保护,提高系统稳定性。
通过对图3分析得知,本发明技术方案中的高并发线程流控装置是一个通用独立的组件,其通用性体现在执行任务的多样性和无关性上,示意说明参见图4所示。
线程流控装置采用“抽象与具体”的办法将业务请求层中各种请求业务抽象为其统一的任务对象,比如JMS消息业务可以将消息发送封装成一个流控任务,文件传输任务和网元事件处理任务也是如此。这些具体的任务放入任务缓冲池中后,线程流控装置把它们均认为是通用任务,不做任何区别对待,按照“先进先出”的策略统一存储。任务调度器在信号量许可的情况下,从任务缓冲池中逐个提取任务,并开启新线程执行任务,在此过程中任务调度器只对任务提供执行场所,并不关心任务具体内容。任务调度器只能通过触发Callable方法来执行任务,而如何调用业务处理层的接口由业务请求层负责封装,对于线程流程装置来说是透明的。业务处理层接收到线程执行任务后,根据不同的任务执行类型依次执行,如向JMS服务器发送JMS消息,通过FTP(File Transfer Protocol,文件传输协议)客户端向FTP服务器传输文件,向网元适配器处理网元事件。在线程流控装置内部,流控管理器对任务调度器和任务池进行内部调用,并且流控管理器还可以通过外部的JVM工具进行管理。由此可见,线程流控装置通过以上措施做到了其自身的与任务类型的无关性,也体现了其通用性。
下面介绍本发明技术方案中与线程流控装置有关的时序图,图5展示了线程流控装置与业务请求层和业务处理层之间的调用关系,以及自身内部的重要流程。
1、业务请求层初始化时启动线程流控装置。
2、线程流控装置内部启动。
3、业务请求层生成具体任务:业务请求层通过继承抽象任务的方式产生具体的任务对象。
4、业务请求层将任务放入线程流控装置的任务池中,并唤醒任务调度器。
5、线程流控装置开启执行线程:任务调度器开启,从信号量处获取许可权限,如果许可通过则开启一个新的任务工作线程。
6、线程流控装置向业务处理层执行任务:工作线程启动后执行任务对象Callable方法,它负责与业务处理层进行实际的业务交互。
如果步骤4速度大于步骤5的速度,则会出现任务积压的情形,如果积压超限则自动清空任务池。
上述步骤5和步骤6处于任务存活周期,步骤3、步骤4、步骤5至第二次任务执行处于任务池监控周期。第二次任务执行流程重复上述步骤3至步骤6。
其中,2、线程流控装置内部启动可以包括:
(1)实例化流控管理器:首先将所有的管理接口注册进MBean服务器中,然后开启任务池监控线程,此线程用于检测任务池中任务是否超限。
(2)实例化任务池:采用默认容量创建任务缓冲池。
(3)启动调度器:首先采用默认值创建信号量对象,然后开启调度器主线程,用以监听任务池是否存在可执行任务,否则一直处于阻塞状态。
图5描述了线程流控装置的一般性工作流程,然而在运行过程中有时需要人工调优,图6则展示了外部管理工具与线程流控装置之间的交互时序。
由图6得知,外部管理工具(Jconsole)实施管理时,只能在流控管理器正常启动后才可以进行,其中主要的操作包括:获取当前待执行任务数量,调节信号量,手动清空任务池,手动关闭/重启线程流控装置,手动调节任务池大小等操作。
a、业务请求层初始化时启动线程流控装置。
b、线程流控装置内部启动。
c、管理工具获取当前任务数量。
d、线程流控装置返回当前任务数量至管理工具。
e、管理工具滑动信号量,增大或减小一个粒度。
f、管理工具手动清空任务池。
g、管理工具手动关闭线程流控装置。
h、管理工具手动重启线程流控装置。
i、管理工具手动调节任务池大小。
上述步骤c至步骤i处于任务池监控周期内,并且步骤e至步骤i之间的执行顺序可以根据实际情况而定,也可以只执行其中的部分步骤。
关于业务流程操作需要注意事项总结以下几点内容:
1)、增大/减少信号量:当目前任务池中任务数量接近超限值时,而系统CPU占用率并不高时,可以增大信号量以增强系统并发处理能力,反则可以减少信号量。
2)、清空任务池:如果调节信号量也无法解决任务积压的问题,系统已经出现严重的内存溢出问题,此时为了保护系统可以手动实施清空任务池的操作。
3)、调节任务池大小:当目前任务池中任务数量接近超限值时,但是内存占用率并不高,此时可以适当调大任务池容量,反则可以减少池大小。
首先,本发明技术方案基于MBean技术使得线程流控装置可以实现动态远程管理,从而解决了线程流控装置“可控、可管理”的问题,这是传统线程池所不具备的。
其次,基于“抽象”与“具体”设计理念使得线程流控装置成为了一套通用独立组件,可以控制多种线程任务的并发,很大程度的降低了独立组件与具体业务模块的耦合度。
而且,使用本发明技术方案的线程流控装置来控制系统中大量的并发线程,最大限度的利用了系统资源,同时又很好的保护了系统资源,使得系统具备较强的自我容灾能力。
下面通过列举几个具体的实施例详细介绍本发明提供的一种线程流控方法和装置。
实施例一
详细介绍本发明实施例提供的一种线程流控方法。
参照图7,示出了本发明实施例中一种线程流控方法的流程图。
步骤100,接收并缓存至少一个线程请求任务至任务缓冲池中。
所述线程请求任务由业务请求层将告警消息转化生成并发出。
所述任务缓冲池中的线程请求任务按照先进先出的原则进行缓存。
所述任务缓冲池可以容纳线程请求任务的容量为预先设定的,并且还对任务缓冲池预先设定超限容量。
步骤102,根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作。
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
例如,信号量的数量为20,则从任务缓冲池中获取20个线程请求任务,并开启20个并发任务调度线程。此时,一个线程请求任务由一个并发任务调度线程负责处理。
若任务缓冲池中缓存的线程请求任务的数量达到设定的超限容量,可以适当增大信号量的数量,以使更多的线程请求任务能够被并发任务调度线程处理。
若任务缓冲池中缓存的线程请求任务的数量距离达到设定的超限容量还有富余,可以适当减少信号量的数量,以降低系统资源利用。
综上所述,本发明实施例中的技术方案通过接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
实施例二
详细介绍本发明实施例提供的一种线程流控方法。
参照图8,示出了本发明实施例中一种线程流控方法的流程图。
步骤200,线程流控初始化。
优选地,所述步骤200可以包括:
注册所述管理接口,开启所述任务缓冲池监控线程;并创建所述任务缓冲池,对所述信号量进行初始化操作。
所述管理接口为对外管理接口,通过管理接口可以实现外部工具的远程控制,如控制线程流控的开启和关闭等等操作。
任务缓冲池监控线程可以对任务缓冲池中线程请求任务的数量等信息进行实时监控。
在任务缓冲池创建时,任务缓冲池的容量以及容量上限为预先设定的,任务缓冲池的容量为任务缓冲池可缓存的线程请求任务的最大数量,容量上限为任务缓冲池中线程请求任务的警戒上限。
所述信号量的初始化操作为根据预先设定的数量对信号量进行初始设置,如预先设定信号量的数量为50,则初始化时,信号量的数量就是50。
步骤202,根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
不同类型的告警消息对应着不同类型的线程请求任务,具体可以根据线程请求任务的基本属性信息以及执行请求接口信息而定,基本属性信息可以包括告警消息对应的线程请求任务的来源网元设备的类型、编号等信息,还可以包括告警类型等,执行请求接口信息可以包括线程请求任务对应哪个接口进行请求等。
步骤204,接收并缓存至少一个线程请求任务至任务缓冲池中。
所述线程请求任务由业务请求层将告警消息转化生成并发出。
所述任务缓冲池中的线程请求任务按照先进先出的原则进行缓存。
所述任务缓冲池可以容纳线程请求任务的容量为预先设定的,并且还对任务缓冲池预先设定超限容量。
步骤206,根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作。
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
例如,信号量的数量为20,则从任务缓冲池中获取20个线程请求任务,并开启20个并发任务调度线程。此时,一个线程请求任务由一个并发任务调度线程负责处理。
若任务缓冲池中缓存的线程请求任务的数量达到设定的超限容量,可以适当增大信号量的数量,以使更多的线程请求任务能够被并发任务调度线程处理。
若任务缓冲池中缓存的线程请求任务的数量距离达到设定的超限容量还有富余,可以适当减少信号量的数量,以降低系统资源利用。
步骤208,通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量。
步骤210,判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;若是,则执行步骤212;若否,则执行步骤214。
步骤212,增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
增加信号量的数量以使更多的线程请求任务能够被并发任务调度线程处理。
删除任务缓冲池中的线程请求任务可以为删除任务缓冲池中的部分任务,也可以对任务缓冲池中的全部任务进行清空。当删除部分任务时,可以删除其中优先级或重要性低的任务,保留优先级或重要性高的任务,也可以按照线程请求任务进入任务缓冲池的时间长短来删除,可以删除进入任务缓冲池时间长的线程请求任务。
步骤214,减少所述信号量的数量,以减低资源利用率。
步骤216,通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
可以通过外部工具对线程流控过程进行监控,人工动态调节信号量的数量,以及手动清空任务缓冲池中的线程请求任务。
需要说明的是,上述步骤208、步骤210、步骤212、步骤214和步骤216可以在步骤204之后实时执行,执行顺序可以根据实际情况而定,按照顺序编号只是为了便于理解。
综上所述,本发明实施例中的技术方案通过接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
本发明实施例中的技术方案通过对外提供的管理接口,使得人工可以远程滑动式微调信号量大小,并可以远程调节任务缓冲池的最大容量值,实现了可调节性任务缓冲池的特性,令并发任务调度线程的数量与任务缓冲池中线程请求任务的数量得以最佳匹配,从而有效的利用了系统资源,同时可调节性任务缓冲池的特性,和自动或手动清空任务缓冲池的功能增强了系统的容灾能力。
实施例三
详细介绍本发明实施例提供的一种线程流控装置。
参照图9,示出了本发明实施例中一种线程流控装置的结构图。
所述装置可以包括:任务接收模块300,任务调度模块302。
下面分别详细介绍各模块的功能以及各模块之间的关系。
任务接收模块300,用于接收并缓存至少一个线程请求任务至任务缓冲池中。
任务调度模块302,用于根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作。
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
综上所述,本发明实施例中的技术方案通过接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
实施例四
详细介绍本发明实施例提供的一种线程流控装置。
参照图10,示出了本发明实施例中一种线程流控装置的结构图。
所述装置可以包括:初始化模块400,任务生成模块402,任务接收模块404,任务调度模块406,任务监控模块408,任务判断模块410,调整清除模块412,远程管理模块414。
下面分别详细介绍各模块的功能以及各模块之间的关系。
初始化模块400,用于在所述任务接收模块404接收并缓存至少一个线程请求任务至任务缓冲池中之前,注册所述管理接口,开启所述任务缓冲池监控线程;并创建所述任务缓冲池,对所述信号量进行初始化操作。
任务生成模块402,用于根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
任务接收模块404,用于接收并缓存至少一个线程请求任务至任务缓冲池中。
任务调度模块406,用于根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作。
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
任务监控模块408,用于通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量。
任务判断模块410,用于判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限。
调整清除模块412,用于若所述任务缓冲池中的线程请求任务的数量大于等于预先设定的任务缓冲池容量上限,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
远程管理模块414,用于通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
需要说明的是,上述任务监控模块408、任务判断模块410、调整清除模块412和远程管理模块414可以在任务接收模块404接收并缓存至少一个线程请求任务至任务缓冲池中之后实时执行各自的操作,执行顺序可以根据实际情况而定,按照顺序编号只是为了便于理解。
综上所述,本发明实施例中的技术方案通过接收并缓存至少一个线程请求任务至任务缓冲池中;根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。也就是说,通过调节信号量的数量进一步控制线程请求任务的调度,在任务缓冲池中的线程请求任务较少时,可以适当减少信号量的数量,相对少量地调度线程请求任务;在任务缓冲池中的线程请求任务较多时,可以适当增加信号量的数量,相对大量地调度线程请求任务,实现线程数量的可控,可以最大限度的利用系统资源。
本发明实施例中的技术方案通过对外提供的管理接口,使得人工可以远程滑动式微调信号量大小,并可以远程调节任务缓冲池的最大容量值,实现了可调节性任务缓冲池的特性,令并发任务调度线程的数量与任务缓冲池中线程请求任务的数量得以最佳匹配,从而有效的利用了系统资源,同时可调节性任务缓冲池的特性,和自动或手动清空任务缓冲池的功能增强了系统的容灾能力。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本发明实施例所提供的一种线程流控方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种线程流控方法,其特征在于,包括:
接收并缓存至少一个线程请求任务至任务缓冲池中;
根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
2.根据权利要求1所述的方法,其特征在于,所述线程请求任务通过以下方式生成:
根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
若大于等于,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
5.根据权利要求4所述的方法,其特征在于,所述接收并缓存至少一个线程请求任务至任务缓冲池中之前,所述方法还包括:
注册所述管理接口,开启所述任务缓冲池监控线程;并
创建所述任务缓冲池,对所述信号量进行初始化操作。
6.一种线程流控装置,其特征在于,包括:
任务接收模块,用于接收并缓存至少一个线程请求任务至任务缓冲池中;
任务调度模块,用于根据动态可调的信号量从所述任务缓冲池中获取至少一个线程请求任务,并开启至少一个并发任务调度线程,以执行获取的线程请求任务的调度操作;
其中,所述并发任务调度线程的数量与所述动态可调的信号量的数量相同。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
任务生成模块,用于根据预先设定的线程请求任务的基本属性信息和执行请求接口信息,将告警消息转化生成为线程请求任务。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
任务监控模块,用于通过任务缓冲池监控线程实时监控所述任务缓冲池中的线程请求任务的数量;
任务判断模块,用于判断所述任务缓冲池中的线程请求任务的数量是否大于等于预先设定的任务缓冲池容量上限;
调整清除模块,用于若所述任务缓冲池中的线程请求任务的数量大于等于预先设定的任务缓冲池容量上限,则增加所述信号量的数量或删除所述任务缓冲池中的线程请求任务。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
远程管理模块,用于通过管理接口远程增加或减少所述信号量的数量,和/或删除所述任务缓冲池中的线程请求任务。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
初始化模块,用于在所述任务接收模块接收并缓存至少一个线程请求任务至任务缓冲池中之前,注册所述管理接口,开启所述任务缓冲池监控线程;并创建所述任务缓冲池,对所述信号量进行初始化操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410790566.9A CN104572277B (zh) | 2014-12-17 | 2014-12-17 | 一种线程流控方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410790566.9A CN104572277B (zh) | 2014-12-17 | 2014-12-17 | 一种线程流控方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572277A true CN104572277A (zh) | 2015-04-29 |
CN104572277B CN104572277B (zh) | 2018-04-27 |
Family
ID=53088424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410790566.9A Active CN104572277B (zh) | 2014-12-17 | 2014-12-17 | 一种线程流控方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572277B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105049243A (zh) * | 2015-06-30 | 2015-11-11 | 上海斐讯数据通信技术有限公司 | 一种用户mac定位方法、系统及服务器 |
CN106936688A (zh) * | 2015-12-30 | 2017-07-07 | 北京国双科技有限公司 | 通知发送方法和装置 |
CN107025148A (zh) * | 2016-10-19 | 2017-08-08 | 阿里巴巴集团控股有限公司 | 一种海量数据的处理方法和装置 |
CN107704328A (zh) * | 2017-10-09 | 2018-02-16 | 郑州云海信息技术有限公司 | 客户端访问文件系统的方法、系统、装置及存储介质 |
CN107832126A (zh) * | 2017-10-20 | 2018-03-23 | 平安科技(深圳)有限公司 | 一种线程的调整方法及其终端 |
CN107832100A (zh) * | 2017-10-27 | 2018-03-23 | 平安普惠企业管理有限公司 | 一种apk插件的加载方法及其终端 |
CN109783229A (zh) * | 2018-12-17 | 2019-05-21 | 平安普惠企业管理有限公司 | 线程资源分配的方法及装置 |
CN109815087A (zh) * | 2019-01-07 | 2019-05-28 | 平安科技(深圳)有限公司 | 任务处理进程监控方法、装置、计算机设备和存储介质 |
CN109857774A (zh) * | 2018-12-26 | 2019-06-07 | 广州海达安控智能科技有限公司 | 基于多传感器融合变形监测数据统计方法以及装置 |
CN110018892A (zh) * | 2019-03-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 基于线程资源的任务处理方法及相关装置 |
CN110515710A (zh) * | 2019-08-06 | 2019-11-29 | 深圳市随手科技有限公司 | 异步任务调度方法、装置、计算机设备和存储介质 |
CN111831422A (zh) * | 2019-04-15 | 2020-10-27 | 大唐移动通信设备有限公司 | 一种任务处理方法及装置 |
CN111858046A (zh) * | 2020-07-13 | 2020-10-30 | 海尔优家智能科技(北京)有限公司 | 服务请求的处理方法及装置、存储介质、电子装置 |
CN115150198A (zh) * | 2022-09-01 | 2022-10-04 | 国汽智控(北京)科技有限公司 | 车载入侵检测系统、方法、电子设备及存储介质 |
CN116489090A (zh) * | 2023-06-16 | 2023-07-25 | 北京百度网讯科技有限公司 | 流量控制方法、装置、系统、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101135981A (zh) * | 2007-08-29 | 2008-03-05 | 中兴通讯股份有限公司 | 一种实现批量报表生成的方法及装置 |
CN101189579A (zh) * | 2003-12-31 | 2008-05-28 | 英特尔公司 | 基于行为模型的多线程体系结构 |
CN101739293A (zh) * | 2009-12-24 | 2010-06-16 | 航天恒星科技有限公司 | 一种基于多线程的卫星数据产品生产任务并行调度方法 |
CN102118275A (zh) * | 2009-12-30 | 2011-07-06 | 大唐移动通信设备有限公司 | 一种告警风暴的处理方法及处理装置 |
CN102360310A (zh) * | 2011-09-28 | 2012-02-22 | 中国电子科技集团公司第二十八研究所 | 一种分布式系统环境下的多任务进程监视方法和监视系统 |
CN102426546A (zh) * | 2011-11-04 | 2012-04-25 | 同辉佳视(北京)信息技术股份有限公司 | 多窗口并发显示方法 |
CN103037019A (zh) * | 2013-01-07 | 2013-04-10 | 北京华胜天成科技股份有限公司 | 一种基于云计算的分布式数据采集系统及方法 |
CN103428272A (zh) * | 2013-07-16 | 2013-12-04 | 无限极(中国)有限公司 | 一种中间件线程的监控调度系统及方法 |
CN103902361A (zh) * | 2014-04-04 | 2014-07-02 | 浪潮电子信息产业股份有限公司 | 一种可动态调节尺寸的线程池 |
-
2014
- 2014-12-17 CN CN201410790566.9A patent/CN104572277B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101189579A (zh) * | 2003-12-31 | 2008-05-28 | 英特尔公司 | 基于行为模型的多线程体系结构 |
CN101135981A (zh) * | 2007-08-29 | 2008-03-05 | 中兴通讯股份有限公司 | 一种实现批量报表生成的方法及装置 |
CN101739293A (zh) * | 2009-12-24 | 2010-06-16 | 航天恒星科技有限公司 | 一种基于多线程的卫星数据产品生产任务并行调度方法 |
CN102118275A (zh) * | 2009-12-30 | 2011-07-06 | 大唐移动通信设备有限公司 | 一种告警风暴的处理方法及处理装置 |
CN102360310A (zh) * | 2011-09-28 | 2012-02-22 | 中国电子科技集团公司第二十八研究所 | 一种分布式系统环境下的多任务进程监视方法和监视系统 |
CN102426546A (zh) * | 2011-11-04 | 2012-04-25 | 同辉佳视(北京)信息技术股份有限公司 | 多窗口并发显示方法 |
CN103037019A (zh) * | 2013-01-07 | 2013-04-10 | 北京华胜天成科技股份有限公司 | 一种基于云计算的分布式数据采集系统及方法 |
CN103428272A (zh) * | 2013-07-16 | 2013-12-04 | 无限极(中国)有限公司 | 一种中间件线程的监控调度系统及方法 |
CN103902361A (zh) * | 2014-04-04 | 2014-07-02 | 浪潮电子信息产业股份有限公司 | 一种可动态调节尺寸的线程池 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105049243A (zh) * | 2015-06-30 | 2015-11-11 | 上海斐讯数据通信技术有限公司 | 一种用户mac定位方法、系统及服务器 |
CN106936688A (zh) * | 2015-12-30 | 2017-07-07 | 北京国双科技有限公司 | 通知发送方法和装置 |
CN107025148A (zh) * | 2016-10-19 | 2017-08-08 | 阿里巴巴集团控股有限公司 | 一种海量数据的处理方法和装置 |
CN107025148B (zh) * | 2016-10-19 | 2020-08-25 | 阿里巴巴集团控股有限公司 | 一种海量数据的处理方法和装置 |
CN107704328A (zh) * | 2017-10-09 | 2018-02-16 | 郑州云海信息技术有限公司 | 客户端访问文件系统的方法、系统、装置及存储介质 |
WO2019075980A1 (zh) * | 2017-10-20 | 2019-04-25 | 平安科技(深圳)有限公司 | 一种线程的调整方法及其终端 |
CN107832126A (zh) * | 2017-10-20 | 2018-03-23 | 平安科技(深圳)有限公司 | 一种线程的调整方法及其终端 |
CN107832100A (zh) * | 2017-10-27 | 2018-03-23 | 平安普惠企业管理有限公司 | 一种apk插件的加载方法及其终端 |
CN107832100B (zh) * | 2017-10-27 | 2020-12-04 | 平安普惠企业管理有限公司 | 一种apk插件的加载方法及其终端 |
CN109783229A (zh) * | 2018-12-17 | 2019-05-21 | 平安普惠企业管理有限公司 | 线程资源分配的方法及装置 |
CN109857774B (zh) * | 2018-12-26 | 2024-04-23 | 广州市中海达测绘仪器有限公司 | 基于多传感器融合变形监测数据统计方法以及装置 |
CN109857774A (zh) * | 2018-12-26 | 2019-06-07 | 广州海达安控智能科技有限公司 | 基于多传感器融合变形监测数据统计方法以及装置 |
CN109815087A (zh) * | 2019-01-07 | 2019-05-28 | 平安科技(深圳)有限公司 | 任务处理进程监控方法、装置、计算机设备和存储介质 |
CN109815087B (zh) * | 2019-01-07 | 2022-05-20 | 平安科技(深圳)有限公司 | 任务处理进程监控方法、装置、计算机设备和存储介质 |
CN110018892A (zh) * | 2019-03-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 基于线程资源的任务处理方法及相关装置 |
CN111831422A (zh) * | 2019-04-15 | 2020-10-27 | 大唐移动通信设备有限公司 | 一种任务处理方法及装置 |
CN111831422B (zh) * | 2019-04-15 | 2024-04-30 | 大唐移动通信设备有限公司 | 一种任务处理方法及装置 |
CN110515710A (zh) * | 2019-08-06 | 2019-11-29 | 深圳市随手科技有限公司 | 异步任务调度方法、装置、计算机设备和存储介质 |
CN111858046A (zh) * | 2020-07-13 | 2020-10-30 | 海尔优家智能科技(北京)有限公司 | 服务请求的处理方法及装置、存储介质、电子装置 |
CN111858046B (zh) * | 2020-07-13 | 2024-05-24 | 海尔优家智能科技(北京)有限公司 | 服务请求的处理方法及装置、存储介质、电子装置 |
CN115150198B (zh) * | 2022-09-01 | 2022-11-08 | 国汽智控(北京)科技有限公司 | 车载入侵检测系统、方法、电子设备及存储介质 |
CN115150198A (zh) * | 2022-09-01 | 2022-10-04 | 国汽智控(北京)科技有限公司 | 车载入侵检测系统、方法、电子设备及存储介质 |
CN116489090A (zh) * | 2023-06-16 | 2023-07-25 | 北京百度网讯科技有限公司 | 流量控制方法、装置、系统、电子设备及存储介质 |
CN116489090B (zh) * | 2023-06-16 | 2023-10-24 | 北京百度网讯科技有限公司 | 流量控制方法、装置、系统、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104572277B (zh) | 2018-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104572277A (zh) | 一种线程流控方法和装置 | |
EP3048774B1 (en) | Service processing method, system and device | |
CN108683720B (zh) | 一种容器集群服务配置方法及装置 | |
CN104639374B (zh) | 一种应用程序部署管理系统 | |
CN106384290B (zh) | 保单处理系统、方法及装置 | |
CN109995669B (zh) | 分布式限流方法、装置、设备及可读存储介质 | |
CN101488878B (zh) | 一种智能平台接口管理装置及服务器 | |
DE102020102783A1 (de) | Verfahren und einrichtungen zum verbessern einer leistungsdatensammlung einer hochleistungsberechnungsanwendung | |
CN111026602A (zh) | 一种云平台的健康巡检调度管理方法、装置及电子设备 | |
CN104598300A (zh) | 分布式业务流程定制方法及系统 | |
CN107168853A (zh) | 一种服务器性能信息获取方法、系统和基板控制管理器 | |
CN106375103B (zh) | 一种告警数据采集和发送方法 | |
CN110519388B (zh) | 区块链请求的处理方法、装置、电子设备及可读存储介质 | |
CN105404554B (zh) | 用于Storm流计算框架的方法和装置 | |
CN101787957A (zh) | 一种风电控制系统的监控装置及其监控方法 | |
Ravindra et al. | Latency aware elastic switching-based stream processing over compressed data streams | |
CN112448987A (zh) | 一种熔断降级的触发方法、系统和存储介质 | |
CN112667683B (zh) | 流计算系统及其电子设备和存储介质 | |
CN114338484A (zh) | 光网络性能数据融合采集方法、装置、设备和存储介质 | |
CN110943971A (zh) | 一种事件业务处理方法及系统 | |
CN109104334B (zh) | 监控系统中节点的管理方法和装置 | |
WO2020185514A1 (en) | Usecase specification and runtime execution to serve on-demand queries and dynamically scale resources | |
CN109308219B (zh) | 任务处理方法、装置及分布式计算机系统 | |
CN114217867A (zh) | 自动化运维代理装置、设备和存储介质 | |
CN112463167B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |