CN113961338A - 一种动态线程池的管理***、管理方法及线程任务处理方法 - Google Patents
一种动态线程池的管理***、管理方法及线程任务处理方法 Download PDFInfo
- Publication number
- CN113961338A CN113961338A CN202111092624.7A CN202111092624A CN113961338A CN 113961338 A CN113961338 A CN 113961338A CN 202111092624 A CN202111092624 A CN 202111092624A CN 113961338 A CN113961338 A CN 113961338A
- Authority
- CN
- China
- Prior art keywords
- thread
- thread pool
- size
- pool
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种动态线程池的管理***、管理方法及线程任务处理方法,该***包括可信检验模块和动态线程池模块;通过可信检验模块对加入线程池任务进行检验;通过动态线程池模块存储通过检验的加入线程池任务,以及根据线程请求对线程池大小进行动态调整。本发明实现了线程池的自适应调整,能够均衡地分配各应用程序所获得***资源,使得处理器的内存资源得到有效的利用,提高***的安全性和可靠性。
Description
技术领域
本发明涉及线程池安全技术领域,更具体地说,涉及一种动态线程池的管理***、管理方法及线程任务处理方法。
背景技术
随着智慧物联体系的建设推进,物联感知范围不断延伸,边缘物联代理作为物联终端的汇聚接入节点,已逐步在各类业务场景中得到使用。面对种类繁多、协议不同的业务终端接入,尤其对于海量物联终端接入的场景,对边缘物联代理提出新挑战。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲,则线程池将***另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但必须等到其他线程完成后才能启动。
虽然线程池是构建多线程应用程序的强大机制,但使用它并不是没有风险的。在使用线程池时需注意线程池大小与性能的关系,注意并发风险、死锁、资源不足和线程安全等问题。
发明内容
本发明的目的在于提供一种动态线程池的管理***、管理方法及线程任务处理方法,防止线程出现并发风险、死锁、资源不足及数据安全等问题。
为达到上述目的,本发明采用的技术方案如下:
第一方面,本发明提供一种动态线程池的管理***,包括可信检验模块和动态线程池模块;
所述可信检验模块用于对加入线程池任务进行检验;
所述动态线程池模块用于获取通过检验的加入线程池任务,以及用于对线程池大小进行动态调整。
优选的,所述可信检验模块具体用于,
在加入线程池任务启动之前对任务的应用程序进行校验,其中校验的基准值为应用程序开发者发布的应用签名,或者可信检验模块提供的校验基准值;
以及,
将加入线程池任务的应用行为与预先构建的行为规则库进行匹配,匹配通过则将加入线程池任务加入到动态线程池模块,否则,对加入线程池任务进行验签,如果验签不通过,则进行阻断或删除;如果验签通过,则加入到动态线程池模块。
优选的,
预先构建可信应用程序的白名单,通过收集白名单中应用程序的历史行为数据,建立行为规则库。
优选的,所述可信检验模块还用于,
将通过检验的加入线程池任务放在任务列表,并标记请求任务状态;
每次扫描任务列表时均检索上一个任务是否执行完成,如果执行完成再执行本次任务,并修改任务状态;
根据任务执行记录推断出任务执行的逻辑先后顺序,建立任务的依赖关系。
优选的,所述可信检验模块采用可信芯片TPM。
优选的,所述动态线程池模块具体用于,
接收加入线程池任务请求;
根据任务请求数和当前线程池的运行状态、运行线程数调用线程执行请求任务;
如果任务请求数小于线程池大小,则直接调用相应的线程执行任务;
如果任务请求数大于线程池大小,则先调整线程池大小,然后再调用相应的线程执行任务;
如果任务请求数大于线程池大小且大于线程数上限Tmax,则将超过线程数上限Tmax的请求任务,转存于自学习动态线程缓冲器模组中。
优选的,所述动态线程池模块还用于,为线程池中的每个线程生成一个线程标识。
优选的,所述动态线程池模块具体用于,
基于通过白名单验证的任务请求历史数据量初始化线程池上限Tmax 和下限Tmin;
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
第二方面,本发明提供一种动态线程池的管理方法,包括:
获取加入线程池任务请求;
如果任务请求数小于线程池大小,则对线程池不做调整;
如果任务请求数大于线程池大小,则调整线程池大小。
优选的,所述调整线程池大小,包括:
基于通过白名单验证的任务请求历史数据量初始化线程池上限Tmax 和下限Tmin;
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
第三方面,本发明提供一种线程任务的处理方法,包括:
根据当前线程池的运行线程数进行如下判断:
如果任务请求数小于线程池大小,则直接调用相应的线程执行任务;
如果任务请求数大于线程池大小,则先调整线程池大小,再调用相应的线程执行任务;
如果任务请求数大于线程池大小且大于线程数上限Tmax,则将超过线程数上限Tmax的请求任务,转存于自学习动态线程缓冲器模组中。
优选的,所述调整线程池大小,包括:
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
本发明所达到的有益效果为:
本发明通过分析任务请求来改变线程池的大小,能够均衡地分配各应用程序所获得***资源,使得处理器的内存资源得到有效的利用,提高***的安全性和可靠性。
附图说明
图1是本发明实施例提供的自学习动态线程池管理方法流程图;
图2是本发明实施例中可信校验模块处理任务间相关依赖关系示例;
图3是本发明实施例提供的可信校验模块工作流程图。
具体实施方式
下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本发明的一个实施例提供一种动态线程池的管理***,该管理***包括:可信检验模块和动态线程池模块。
本发明实施例中,可信检验模块采用可信芯片TPM来实现。可信芯片TPM作为自学习动态线程池模块可信根,通过在硬件内部实现最基础的安全功能如秘钥存储、安全算法实现从下到上逐级的可信链传递。
本发明实施例中,可信检验模块用于对加入线程池任务进行检验,包括对加入线程池任务进行静态度量和验证,以及对加入线程池任务进行动态度量和验证。
其中,对加入线程池任务进行静态度量和验证具体为,在任务启动之前对其进行校验,仅验签正确后才允许任务的应用程序启动运行。校验的基准值为应用开发者发布的应用签名,或是可信检验模块提供的校验基准值。
对加入线程池任务进行动态度量和验证通过应用行为白名单来实现。被度量和验证的应用行为是软件调用行为,包括进程启动、线程访问等。通过对***调用的监测能够有效地发现应用异常,即不再可信。实现应用可信的具体方式是首先通过对白名单应用的分析,收集白名单用户正常行为,并以此建立行为规则库,然后根据实时采集的应用行为数据,对比应用行为规则库进行判断。如果应用行为无法匹配任何一条规则,这个行为会被判断为异常,则根据异常行为的安全危害等级报警并采取相应措施,如阻断应用、删除应用、重启***等。如果与白名单的行为规则匹配,则将第三应用请求加入动态线程池模块。对环境中运行的应用进行限制可减少不安全的应用对云平台进行攻击的可能性,而对应用的监控可以及时发现攻击并做响应。
应用白名单可通过以下两种方式构建:一是将构建可信应用程序数据库的任务交由管理员,其负责识别、验证和将应用程序加入白名单;二是依赖于第三方维护的可信应用程序的验证数据库,管理员只需选择并批准他们。
本发明实施例中,可信检验模块还用于采用动态关联感知技术对应用行为特征进行判断,可发现应用在不调用白名单以外的情况下的应用异常。动态关联感知通过机器学习产生应用行为基线,在应用运行时采集了一段时间应用的行为,通过大数据分析和机器学习的方式形成应用行为特征,并以此对应用行为特征异常作出判断。
本发明实施例中,可信检验模块还用于对线程中的线程数据进行验签,如果验签不通过,则说明加入线程数据为不可信的,则对该线程数据进行阻断/删除,以保证线程池的安全。如果验签通过,则加入动态线程池模块。
本发明实施例中,可信检验模块还用于对每一个线程任务都进行分析有无相互依赖的任务,相互依赖的任务是指在执行本次任务前是否依赖于另一个任务的完成,避免在线程池中同时或错位的执行有相互依赖关系的任务,导致资源的浪费。
针对通过白名单验证的任务,将所有任务的状态放在可信检验模块中,每次扫描任务列表的时候都去检索它的上个任务是否执行完成,然后再去执行本次任务,执行完一个线程一定要修改这个任务在可信检验模块中的状态,即任务是否完成,根据这个记录可以判断推理出任务执行的逻辑先后顺序,从而建立任务集合的局部依赖关系。
可信检验还可以通过拓扑排序算法,比如Kahn 算法、DFS算法,以及上述推断出的局部依赖关系,确定一个全局执行顺序,从而将任意复杂的依赖任务抽象成有向无环图,拓扑排序算法会自动梳理好依赖关系,并且自动完成并发计算处理好任务间相关依赖关系。比如一个任务集合包含9个逻辑(N,A1,A2,A3,A4,B1,B2,B3,M)如图2所示,其拓扑的序列为:(N->Ax->Bx->M)。执行此任务时通过可信检验确定拓扑顺序与程序间的依赖关系,***自动完成A和B的并发执行,提高***有效计算速度。
可信检验模块的工作流程参见图3。
本发明实施例中,动态线程池模块用于,
当接收到包括线程标识的任务请求后,检查当前线程池的运行状态、运行线程数和运行策略,决定接下来执行的流程是直接申请线程执行,或是先改变线程数上限Tmax和下限Tmin的值,然后再执行,亦或是直接拒绝该任务。
如果当前线程池中的线程数目达到设置的线程数上限Tmax,则需要调用自学习动态线程缓冲器处理该任务,采取自学习动态线程缓冲器的策略,保护线程池和数据完整性和可靠性。自学习动态线程缓冲器是一个公共接口,可以根据业务自定义扩展。如果当前线程池中的线程数目没有达到设置的线程数上限Tmax,则提交该线程标识的任务请求执行。
本发明实施例中,动态线程池模块还用于,为每个线程生成线程标识,即标记每个线程的线程ID,为每个线程申请一个信号量,信号量是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,可以用于做流量控制,根据线程执行的效率来动态调整线程池大小。动态调整线程池大小,具体为,
Ⅰ、对通过白名单验证的任务请求以往数据量进行分析,根据此任务历史的线程运行数,调整线程池的初始上限Tmax 和下限Tmin;
Ⅱ、如果线程的请求数量处于上升阶段(最近三次请求数量均大于***设定线程池大小的阈值),使用调整因子向上调线程池的大小,具体包括:当线程的请求数小于线程池中的线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的线程数量时,使用大于上述平均值而小于线程请求值的数为基准值,将上一次的请求增量作为调整因子,调整线程池的大小;如果线程请求数大于***的最大承载能力,则将线程请求放至自学习动态线程缓存器中。通过自学习动态线程的心跳线再将自学习动态线程缓存器的数据转至线程池中,以保证任务的完整性。
Ⅲ、如果线程请求数处于平稳阶段(最近三次请求数量在***设定线程池大小的阈值以内),当线程请求数小于线程池中的线程数量时,线程池的大小满足对用户请求的处理的需求,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,调整线程池大小以容纳当前线程请求量。
Ⅳ、如果线程请求数处于下降阶段(最近三次请求数量均小于***设定线程池大小的阈值),使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,最近一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用平均水平之上的线程池大小为基准,将最近的请求增量作为调整因子,调整线程池的大小。
Ⅴ、线程池大小调整后分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小,并将任务放至自学习动态线程缓存器中;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
本发明的另一个实施例提供一种线程池的动态调整方法,为每个线程生成线程标识,为每个线程申请一个信号量,并根据线程执行的效率来动态调整线程池大小。具体过程如下:
获取当前任务请求;
如果任务请求数小于线程池大小,则对线程池不做调整;
如果任务请求数大于线程池大小,则调整线程池大小。
其中,调整线程池大小具体实现过程为:
如果线程的请求数量处于上升阶段(最近三次请求数量均大于***设定线程池大小的阈值),使用调整因子向上调线程池的大小,具体包括:当线程的请求数小于线程池中的线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的线程数量时,使用大于上述平均值而小于线程请求值的数为基准值,将上一次的请求增量作为调整因子,调整线程池的大小;如果线程请求数大于***的最大承载能力,则将线程请求放至自学习动态线程缓存器中。通过自学习动态线程的心跳线再将自学习动态线程缓存器的数据转至线程池中,以保证任务的完整性。
如果线程请求数处于平稳阶段(最近三次请求数量在***设定线程池大小的阈值以内),当线程请求数小于线程池中的线程数量时,线程池的大小满足对用户请求的处理的需求,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,调整线程池大小以容纳当前线程请求量。
如果线程请求数处于下降阶段(最近三次请求数量均小于***设定线程池大小的阈值),使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,最近一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用平均水平之上的线程池大小为基准,将最近的请求增量作为调整因子,调整线程池的大小。
线程池大小调整后分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小,并将任务放至自学习动态线程缓存器中;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
在动态线程池大小的调整时,首先要面向用户的请求,在有限的时间内尽可能的响应用户的请求,即***平均响应时间短。其次要面向***,在某一时间片内,动态线程池内的工作线程数量一定,但是***接受的请求数是一个未知的随机数,***的处理能力需要有一定的伸缩性,以保证***有高的吞吐率前提下,消耗资源降低。这就要求在动态调整线程池大小的算法需要满足以下要求:
1)在用户的请求到达***的时候,要求线程池大小在一定时间内有稳定的波动形式;
2)由于动态线程池在创建和销毁工作线程时消耗一定的***资源,降低了***性能,所以在设定动态线程池的下限Tmin要略大于当前工作状态下各任务运行所需的线程数;
3)线程池的上限Tmax,根据***在不同时段里的承受能力,做出相应的调整,虽然网关前置机访问有随机性,但是根据访问内网的用户数量,和对以往不同时段访问量的科学统计,不难预测出上限Tmax。首先,所有任务的调度都是由可信检验模块触发开发的,这部分完成的工作是:检查现在线程池的运行状态、运行线程数、运行策略,决定接下来执行的流程是直接申请线程执行,或是缓冲到队列中执行,亦或是直接拒绝该任务。运行逻辑简单的说如果设置的线程数超时线程数上限Tmax,就交于自学习动态线程缓冲器来处理,自学习动态线程缓冲器将超过线程数上限Tmax,转于内存来存储,当收到线程池中的线程数小于线程数上限Tmax时,将任务再交于线程池运行。
如果当前线程池中的线程数目达到设置的线程数上限Tmax,则需要调用自学习动态线程缓冲器处理该任务,采取自学习动态线程缓冲器模组的策略,保护线程池和数据完整性和可靠性。自学习动态线程缓冲器模组是一个公共接口,可以根据业务自定义扩展。如果当前线程池中的线程数目没有达到设置的线程数上限Tmax,则采用调用提交任务的线程去处理。
本发明的第三个实施例提供一种线程任务的处理方法,具体如下:
根据当前线程池的运行线程数进行如下判断:
如果任务请求数小于线程池大小,则直接调用相应的线程执行任务;
如果任务请求数大于线程池大小,则先调整线程池大小,再调用相应的线程执行任务;
如果任务请求数大于线程池大小且大于线程数上限Tmax,则将超过线程数上限Tmax的请求任务,转存于自学习动态线程缓冲器模组中
其中,任务请求携带线程标识,根据线程标识可调用相对应的线程执行任务。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (12)
1.一种动态线程池的管理***,其特征在于,包括可信检验模块和动态线程池模块;
所述可信检验模块用于对加入线程池任务进行检验;
所述动态线程池模块用于获取通过检验的加入线程池任务,以及用于对线程池大小进行动态调整。
2.根据权利要求1所述的一种动态线程池的管理***,其特征在于,所述可信检验模块具体用于,
在加入线程池任务启动之前对任务的应用程序进行校验,其中校验的基准值为应用程序开发者发布的应用签名,或者可信检验模块提供的校验基准值;
以及,
将加入线程池任务的应用行为与预先构建的行为规则库进行匹配,匹配通过则将加入线程池任务加入到动态线程池模块,否则,对加入线程池任务进行验签,如果验签不通过,则进行阻断或删除;如果验签通过,则加入到动态线程池模块。
3.根据权利要求2所述的一种动态线程池的管理***,其特征在于,
预先构建可信应用程序的白名单,通过收集白名单中应用程序的历史行为数据,建立行为规则库。
4.根据权利要求2所述的一种动态线程池的管理***,其特征在于,所述可信检验模块还用于,
将通过检验的加入线程池任务放在任务列表,并标记请求任务状态;
每次扫描任务列表时均检索上一个任务是否执行完成,如果执行完成再执行本次任务,并修改任务状态;
根据任务执行记录推断出任务执行的逻辑先后顺序,建立任务的依赖关系。
5.根据权利要求2所述的一种动态线程池的管理***,其特征在于,所述可信检验模块采用可信芯片TPM。
6.根据权利要求1所述的一种动态线程池的管理***,其特征在于,所述动态线程池模块具体用于,
接收加入线程池任务请求;
根据任务请求数和当前线程池的运行状态、运行线程数调用线程执行请求任务;
如果任务请求数小于线程池大小,则直接调用相应的线程执行任务;
如果任务请求数大于线程池大小,则先调整线程池大小,然后再调用相应的线程执行任务;
如果任务请求数大于线程池大小且大于线程数上限Tmax,则将超过线程数上限Tmax的请求任务,转存于自学习动态线程缓冲器模组中。
7.根据权利要求6所述的一种动态线程池的管理***,其特征在于,所述动态线程池模块还用于,为线程池中的每个线程生成一个线程标识。
8.根据权利要求6所述的一种动态线程池的管理***,其特征在于,所述动态线程池模块具体用于,
基于通过白名单验证的任务请求历史数据量初始化线程池上限Tmax 和下限Tmin;
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
9.一种动态线程池的管理方法,其特征在于,包括:
获取加入线程池任务请求;
如果任务请求数小于线程池大小,则对线程池不做调整;
如果任务请求数大于线程池大小,则调整线程池大小。
10.根据权利要求9所述的一种动态线程池的管理方法,其特征在于,所述调整线程池大小,包括:
基于通过白名单验证的任务请求历史数据量初始化线程池上限Tmax 和下限Tmin;
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
11.一种线程任务的处理方法,其特征在于,包括:
根据当前线程池的运行线程数进行如下判断:
如果任务请求数小于线程池大小,则直接调用相应的线程执行任务;
如果任务请求数大于线程池大小,则先调整线程池大小,再调用相应的线程执行任务;
如果任务请求数大于线程池大小且大于线程数上限Tmax,则将超过线程数上限Tmax的请求任务,转存于自学习动态线程缓冲器模组中。
12.根据权利要求11所述的一种线程任务的处理方法,其特征在于,所述调整线程池大小,包括:
如果当前线程请求数处于上升阶段,则使用调整因子向上调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为此次的增量调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用大于上述平均值而小于线程请求数的数为基准值,将上一次的请求增量作为增量调整因子,调整线程池的大小;所述当前线程请求数处于上升阶段是指,最近三次线程请求数均大于设定的线程池大小的阈值;
如果当前线程请求数处于平稳阶段,当线程请求数小于线程池中的工作线程数量时,不对当前线程池大小进行调整;当线程请求数大于线程池中的工作线程数量时,以当前线程请求数为基准调整线程池大小;所述线程请求数处于平稳阶段是指,最近三次线程请求数在设定的线程池大小的阈值以内;
如果当前线程请求数处于下降阶段,则使用调整因子向下调线程池的大小,具体包括:当线程请求数小于线程池中的工作线程数量时,使用线程请求数和当前线程池大小的平均值为基准值,上一次的请求增量作为调整因子,调整线程池的大小;当线程请求数大于线程池中的工作线程数量时,使用当前线程池大小的平均值为基准,将上一次的请求增量作为调整因子,调整线程池的大小;所述线程请求数处于下降阶段是指,最近三次线程请求数量均小于设定的线程池大小的阈值;
将调整后的线程池大小分别同上限Tmax 和下限Tmin 比较,如果大于Tmax,则使用Tmax 作为线程池大小;如果小于Tmin,则使用Tmin 作为线程池的大小;如果在Tmax 和Tmin之间,则采用调整后的线程池大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111092624.7A CN113961338A (zh) | 2021-09-17 | 2021-09-17 | 一种动态线程池的管理***、管理方法及线程任务处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111092624.7A CN113961338A (zh) | 2021-09-17 | 2021-09-17 | 一种动态线程池的管理***、管理方法及线程任务处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113961338A true CN113961338A (zh) | 2022-01-21 |
Family
ID=79461888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111092624.7A Pending CN113961338A (zh) | 2021-09-17 | 2021-09-17 | 一种动态线程池的管理***、管理方法及线程任务处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113961338A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114726798A (zh) * | 2022-02-28 | 2022-07-08 | 福建星云电子股份有限公司 | 一种锂电池测试通道限流方法及*** |
CN118051346A (zh) * | 2024-04-11 | 2024-05-17 | 恒生电子股份有限公司 | 请求动态限流方法、装置、电子设备和可读存储介质 |
-
2021
- 2021-09-17 CN CN202111092624.7A patent/CN113961338A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114726798A (zh) * | 2022-02-28 | 2022-07-08 | 福建星云电子股份有限公司 | 一种锂电池测试通道限流方法及*** |
CN114726798B (zh) * | 2022-02-28 | 2023-07-18 | 福建星云电子股份有限公司 | 一种锂电池测试通道限流方法及*** |
CN118051346A (zh) * | 2024-04-11 | 2024-05-17 | 恒生电子股份有限公司 | 请求动态限流方法、装置、电子设备和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11188392B2 (en) | Scheduling system for computational work on heterogeneous hardware | |
CN112162865B (zh) | 服务器的调度方法、装置和服务器 | |
US8424007B1 (en) | Prioritizing tasks from virtual machines | |
WO2020181813A1 (zh) | 一种基于数据处理的任务调度方法及相关设备 | |
US8739171B2 (en) | High-throughput-computing in a hybrid computing environment | |
US8914805B2 (en) | Rescheduling workload in a hybrid computing environment | |
EP2434401A1 (en) | Method and system for managing thread pool | |
WO2017067586A1 (en) | Method and system for code offloading in mobile computing | |
US9875141B2 (en) | Managing pools of dynamic resources | |
US20120096457A1 (en) | System, method and computer program product for preprovisioning virtual machines | |
CN110308980A (zh) | 数据的批量处理方法、装置、设备及存储介质 | |
CN113961338A (zh) | 一种动态线程池的管理***、管理方法及线程任务处理方法 | |
CN106557369A (zh) | 一种多线程的管理方法及*** | |
US11656902B2 (en) | Distributed container image construction scheduling system and method | |
CN108228330B (zh) | 一种串行化的多进程任务调度方法和装置 | |
JP2005108220A (ja) | リアルタイムsla影響分析 | |
CN113157411A (zh) | 一种基于Celery的可靠可配置任务***及装置 | |
Varga et al. | Deadline scheduling algorithm for sustainable computing in Hadoop environment | |
CN107368324A (zh) | 一种组件升级方法、装置和*** | |
Bertogna et al. | Static-priority scheduling and resource hold times | |
Marinescu et al. | An auction-driven self-organizing cloud delivery model | |
Nivitha et al. | Self-regulatory fault forbearing and recuperation scheduling model in uncertain cloud context | |
CN110659108A (zh) | 一种云***虚拟机任务迁移方法及装置、服务器 | |
CN113065055B (zh) | 新闻资讯抓取方法、装置、电子设备及存储介质 | |
Xu et al. | Towards autonomic virtual applications in the in-vigo system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |