CN106155803B - 一种基于信号量的线程池共享方法及系统 - Google Patents

一种基于信号量的线程池共享方法及系统 Download PDF

Info

Publication number
CN106155803B
CN106155803B CN201510162291.9A CN201510162291A CN106155803B CN 106155803 B CN106155803 B CN 106155803B CN 201510162291 A CN201510162291 A CN 201510162291A CN 106155803 B CN106155803 B CN 106155803B
Authority
CN
China
Prior art keywords
thread
thread pool
request queue
pool
semaphore
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.)
Expired - Fee Related
Application number
CN201510162291.9A
Other languages
English (en)
Other versions
CN106155803A (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.)
BEIJING BEIDA FOUNDER ELECTRONICS Co Ltd
New Founder Holdings Development Co ltd
Original Assignee
Peking University Founder Group Co Ltd
Beijing Founder Electronics 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 Peking University Founder Group Co Ltd, Beijing Founder Electronics Co Ltd filed Critical Peking University Founder Group Co Ltd
Priority to CN201510162291.9A priority Critical patent/CN106155803B/zh
Publication of CN106155803A publication Critical patent/CN106155803A/zh
Application granted granted Critical
Publication of CN106155803B publication Critical patent/CN106155803B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Multi Processors (AREA)

Abstract

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

Description

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

Claims (10)

1.一种基于信号量的线程池共享方法,其特征在于,所述方法包括:
当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;
若存在请求队列为空的线程池,则利用所述线程池执行所述功能请求的任务;
若不存在请求队列位空的线程池,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。
2.根据权利要求1所述的方法,其特征在于,所述当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池的步骤前,所述方法还包括:
建立多个线程池;
为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。
3.根据权利要求2所述的方法,其特征在于,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:
根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。
4.根据权利要求3所述的方法,其特征在于,所述判断系统的所有线程池中是否存在请求队列为空的线程池,包括:
判断线程池的信号量是否为0,若所述线程池的信号量不为0,则所述线程池的请求队列为空;若所述线程池的信号量为0,则所述线程池的请求队列不为空。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所有线程池的请求队列进行检测,若检测到请求队列为空的线程池,则将请求队列最长的线程池中的任一未运行的任务出队,利用所述请求队列为空的线程池处理所述任务。
6.一种基于信号量的线程池共享系统,其特征在于,所述系统包括:
判断模块,用于当接收到包括线程池标识的功能请求后,判断系统的所有线程池中是否存在请求队列为空的线程池;
执行模块,用于当存在请求队列为空的线程池时,利用所述线程池执行所述功能请求的任务;
入队模块,用于当不存在请求队列位空的线程池时,则将所述功能请求加入所述线程池标识对应的线程池的请求队列。
7.根据权利要求6所述的系统,其特征在于,所述系统还包括:
预设模块,用于建立多个线程池;为每个线程池生成线程池标识,为每个线程池申请一个与所述线程池容量相等的信号量,并为每个线程池建立一个请求队列。
8.根据权利要求7所述的系统,其特征在于,所述判断模块,具体用于:
根据线程池的信号量的值,判断系统的所有线程池中是否存在请求队列为空的线程池。
9.根据权利要求8所述的系统,其特征在于,所述判断模块,具体用于:
判断线程池的信号量是否为0,若所述线程池的信号量不为0,则所述线程池的请求队列为空;若所述线程池的信号量为0,则所述线程池的请求队列不为空。
10.根据权利要求6所述的系统,其特征在于,所述系统还包括:
检测模块,用于对所有线程池的请求队列进行检测,若检测到请求队列为空的线程池,则将请求队列最长的线程池中的任一未运行的任务出队,利用所述请求队列为空的线程池处理所述任务。
CN201510162291.9A 2015-04-07 2015-04-07 一种基于信号量的线程池共享方法及系统 Expired - Fee Related CN106155803B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510162291.9A CN106155803B (zh) 2015-04-07 2015-04-07 一种基于信号量的线程池共享方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510162291.9A CN106155803B (zh) 2015-04-07 2015-04-07 一种基于信号量的线程池共享方法及系统

Publications (2)

Publication Number Publication Date
CN106155803A CN106155803A (zh) 2016-11-23
CN106155803B true CN106155803B (zh) 2019-08-30

Family

ID=57335692

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510162291.9A Expired - Fee Related CN106155803B (zh) 2015-04-07 2015-04-07 一种基于信号量的线程池共享方法及系统

Country Status (1)

Country Link
CN (1) CN106155803B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106940658B (zh) * 2017-02-21 2022-09-09 腾讯科技(深圳)有限公司 基于线程池的任务处理方法及装置
CN108459825B (zh) * 2018-01-30 2020-12-29 深圳神州数码云科数据技术有限公司 一种存储系统服务质量控制方法和装置
CN109862069B (zh) * 2018-12-13 2020-06-09 百度在线网络技术(北京)有限公司 消息处理方法和装置
CN109783230A (zh) * 2018-12-17 2019-05-21 平安普惠企业管理有限公司 基于信号量的流量控制方法、装置、计算机设备和存储介质
CN110008012A (zh) * 2019-03-12 2019-07-12 平安普惠企业管理有限公司 一种信号量许可的调整方法及装置
CN110046038A (zh) * 2019-03-12 2019-07-23 平安普惠企业管理有限公司 一种基于线程池的任务处理方法及装置
CN110032434A (zh) * 2019-03-12 2019-07-19 平安普惠企业管理有限公司 一种信号量许可的调整方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1297198A (zh) * 1999-11-18 2001-05-30 国际商业机器公司 管理计算环境线程池以避免死锁情况的方法、系统和程序产品
US6314114B1 (en) * 1998-06-23 2001-11-06 Oracle Corporation Distributed resource management
CN1514354A (zh) * 2002-12-31 2004-07-21 ����̩ƽ 面向构件基于系统内核的进程池/线程池管理方法
CN103713944A (zh) * 2013-12-13 2014-04-09 上海华为技术有限公司 一种内核中线程的处理方法、装置和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6314114B1 (en) * 1998-06-23 2001-11-06 Oracle Corporation Distributed resource management
CN1297198A (zh) * 1999-11-18 2001-05-30 国际商业机器公司 管理计算环境线程池以避免死锁情况的方法、系统和程序产品
CN1514354A (zh) * 2002-12-31 2004-07-21 ����̩ƽ 面向构件基于系统内核的进程池/线程池管理方法
CN103713944A (zh) * 2013-12-13 2014-04-09 上海华为技术有限公司 一种内核中线程的处理方法、装置和系统

Also Published As

Publication number Publication date
CN106155803A (zh) 2016-11-23

Similar Documents

Publication Publication Date Title
CN106155803B (zh) 一种基于信号量的线程池共享方法及系统
CN106980546B (zh) 一种任务异步执行方法、装置及系统
KR101610828B1 (ko) 멀티코어 프로세서의 인터럽트 온/오프 관리 장치와 방법
US9400685B1 (en) Dividing, scheduling, and parallel processing compiled sub-tasks on an asynchronous multi-core processor
US8145820B2 (en) Multiprocessor system and computer program product
CN108027751A (zh) 对多版本任务的高效调度
EP3376379A1 (en) Task management methods and system, and computer storage medium
KR20120017294A (ko) 어플리케이션을 효율적으로 처리하는 스케쥴링 시스템 및 스케쥴링 방법
CN101499041B (zh) 一种避免主机在访问共享设备造成异常死锁的方法
CN103294533A (zh) 任务流控制方法及系统
WO2008142705A4 (en) A method and system for load balancing in a distributed computer system
CN102207890A (zh) 一种任务信息处理方法及调度控制处理装置
CN109684060A (zh) 一种多类型时间关键任务的混合调度方法
JP2011065645A (ja) マルチコアプロセッサシステム
CN103744723A (zh) 一种线程池的管理方法和管理系统
CN100346307C (zh) Java操作系统中实时任务调度的实现方法
CN109522101A (zh) 用于调度多个操作系统任务的方法、系统和/或装置
CN105573827A (zh) 一种多机并行处理方法及装置
US9367349B2 (en) Multi-core system and scheduling method
US20030018682A1 (en) Computer system and computer-readable record medium
CN103019849B (zh) 云计算环境下的虚拟机管理方法
JP2014509767A (ja) オペレーティング・システムを実行するプロセッサ・コアの動的割当
CN107832144B (zh) 分布式并行计算方法和装置
CN100535864C (zh) 一种系统进程调度下无效超时消息的方法及消息发送方法
TW200905567A (en) Notifying user mode scheduler of blocking events

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220629

Address after: 3007, Hengqin international financial center building, No. 58, Huajin street, Hengqin new area, Zhuhai, Guangdong 519031

Patentee after: New founder holdings development Co.,Ltd.

Patentee after: Beijing Beida Founder Electronics Co., Ltd.

Address before: 100871, fangzheng building, 298 Fu Cheng Road, Beijing, Haidian District

Patentee before: PEKING UNIVERSITY FOUNDER GROUP Co.,Ltd.

Patentee before: Beijing Beida Founder Electronics Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190830