一种基于信号量的线程池共享方法及系统技术方案

技术编号:14233722 阅读:40 留言:0更新日期:2016-12-21 00:39
本发明专利技术提供了一种基于信号量的线程池共享方法,包括:当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;所述功能请求包括线程池标识;若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。本发明专利技术还提供了一种基于信号量的线程池共享系统,包括判断模块、执行模块及入队模块。本发明专利技术能够均衡地分配各功能资源,使得处理器的内存资源得到有效的利用,使系统更加灵活。

Thread pool sharing method and system based on semaphore

The present invention provides a method of sharing, semaphore thread pool based on: when receiving the thread pool identification function including the request, to determine whether the request queue is empty thread pool all thread pool system; the function request includes thread pool identity; if the request queue is empty thread the pool is, using the thread pool executes the function request task; if there is no request for you team empty thread pool, the request queue the function request to join the thread pool identifier corresponding to the thread pool. The invention also provides a system of shared signal based on the thread pool, which comprises a judging module, execution module and enqueue module. The invention can evenly allocate various functional resources, so that the memory resources of the processor can be effectively utilized to make the system more flexible.

【技术实现步骤摘要】

本专利技术涉及计算机
,尤其涉及一种基于信号量的线程池共享方法及系统
技术介绍
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但必须等到其他线程完成后才能启动。虽然线程池是构建多线程应用程序的强大机制,但使用它并不是没有风险的。在使用线程池时需注意线程池大小与性能的关系,注意并发风险、死锁、资源不足和线程泄漏等问题。目前,线程池的使用均为独立的,并不存在共享的情况。而且线程池只针对某一类功能提供,而这种方式的缺陷是线程池的独立使用,使得处理器内存资源不能得到有效利用。
技术实现思路
针对现有技术的缺陷,本专利技术提供一种基于信号量的线程池共享方法及系统,通过信号量控制的方式,通过适当的调度,使线程池在逻辑上成为一个整体,从而能够为多类功能提供线程池服务,使得处理器的内存资源得到有效的利用。第一方面,本专利技术提供一种基于信号量的线程池共享方法,所述
方法包括:当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。优选地,所述当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池的步骤前,所述方法还包括:建立多个线程池;为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。优选地,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。优选地,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:判断线程池的信号量是否为0,若所述线程池的信号量不为0,则所述线程池的请求队列为空;若所述线程池的信号量为0,则所述线程池的请求队列不为空。优选地,所述方法还包括:对所有线程池的请求队列进行检测,若检测到请求队列为空的线程池,则将请求队列最长的线程池中的任一未运行的任务出队,利用所述请求队列为空的线程池处理所述任务。第二方面,本专利技术提供了一种基于信号量的线程池共享系统,所述系统包括:判断模块,用于当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;执行模块,用于当存在请求队列为空的线程池时,利用所述线程池执行所述功能请求的任务;入队模块,用于当不存在请求队列位空的线程池时,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。优选地,所述系统还包括:预设模块,用于建立多个线程池;为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。优选地,所述判断模块,具体用于:根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。优选地,所述判断模块,具体用于:判断线程池的信号量是否为0,若所述线程池的信号量不为0,则所述线程池的请求队列为空;若所述线程池的信号量为0,则所述线程池的请求队列不为空。优选地,所述系统还包括:检测模块,用于对所有线程池的请求队列进行检测,若检测到请求队列为空的线程池,则将请求队列最长的线程池中的任一未运行的任务出队,利用所述请求队列为空的线程池处理所述任务。由上述技术方案可知,本专利技术提供一种基于信号量的线程池共享方法及系统,通过信号量控制的方式,通过适当的调度,使线程池在逻辑上成为一个整体,从而能够为多类功能提供线程池服务,使得处理器的内存资源得到有效的利用。本专利技术充分利用计算机的处理资源,在处理并发任务时,能够均衡地分配各功能资源,而且能够根据功能的有无,能够选择是否加载线程池,使得系统更加灵活。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。图1是本专利技术一实施例提供的一种基于信号量的线程池共享方法的流程示意图;图2是本专利技术另一实施例提供的一种基于信号量的线程池共享方系统的结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。如图1所示,本专利技术一实施例提供了一种基于信号量的线程池共享方法,该方法包括如下步骤:S1:当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;S2:若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;S3:若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。本实施例中,首先搜索请求队列为空的线程池,如果存在未处理任何任务的线程池,则直接执行请求的任务,如果所有线程池均有功能请求在被处理,即将该功能请求送入标识对应的原线程池服务提供
者队列,入队。由此可见,该方法可以有效提高系统的效率,使得系统更为灵活,需要说明的是,步骤S1中接收到的功能请求绑定了线程池标识,用于识别该功能的原线程池服务提供者。本实施例中,在步骤S1之前,该方法还包括如下步骤:建立多个线程池;为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。其中,建立的多个线程池可以根据需要为功能提供相应的服务,但并不要求线程池的实现方法相同。需要说明的是,线程池容量是指线程池中线程的多少,设置信号量与线程池容量大小相等,则每当一个线程被占用,则信号量的值减一,当某个线程被释放,信号量的值加一。则当信号量减至零时,表明线程池中的线程均被占用,则后续的功能请求加入该线程池的请求队列中,等待被处理。具体来说,当建立上述多个线程池后,系统建立线程池管理工厂,将所有的线程池注册到该工厂中,统一由工厂进行功能请求的响应,从而决定将线程池服务提供给相应的功能。本实施例中,步骤S1中判断系统中是否存在请求队列为空的线程池,具体包括:根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。其中,信号量是一个非负整数,所有通过它的线程/进程都会将该整数减一(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。在信号量上我们定义两种操作:Wait(等待)和Release(释放)。当一个线程调用Wait操作时,它要本文档来自技高网
...
一种基于信号量的线程池共享方法及系统

【技术保护点】
一种基于信号量的线程池共享方法,其特征在于,所述方法包括:当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。

【技术特征摘要】
1.一种基于信号量的线程池共享方法,其特征在于,所述方法包括:当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。2.根据权利要求1所述的方法,其特征在于,所述当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池的步骤前,所述方法还包括:建立多个线程池;为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。3.根据权利要求2所述的方法,其特征在于,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。4.根据权利要求3所述的方法,其特征在于,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:判断线程池的信号量是否为0,若所述线程池的信号量不为0,则所述线程池的请求队列为空;若所述线程池的信号量为0,则所述线程池的请求队列不为空。5.根据权利要求1所述的方法,其特征在于,所述方法还包括:对所有线程池的请求队列进行检测,若检测到请求队列为空的线程池,则将请求队列最长的线程池中的任一未运行的任务出...

【专利技术属性】
技术研发人员:韩宁
申请(专利权)人:北大方正集团有限公司北京北大方正电子有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1