基于线程池的优先队列调度方法、系统、设备及存储介质与流程

文档序号:32351028发布日期:2022-11-26 13:07阅读:95来源:国知局
基于线程池的优先队列调度方法、系统、设备及存储介质与流程

1.本发明涉及计算机技术领域,特别是涉及一种基于线程池的优先队列调度方法、系统、计算机设备和存储介质。


背景技术:

2.当前在服务器软件应用领域处理存在优先级的数据时,需要使用工作线程池实现服务并发处理,通过向工作线程池请求线程调度以实现高并发异步操作。
3.现有基于优先级排队决定线程调度先后顺序的方法是每个优先级对应一个处理线程池,依据线程池内的线程数量来控制优先级的处理。优先级高的对应线程池线程数量较多,优先级低的对应线程数量较少。然而,在服务系统中,每一个线程都是宝贵的资源,若同时存在所有优先级的待处理数据,则应用上述调度方法没有问题,但若某个时段不是所有的优先级都有数据时,就会出现部分没有数据的线程池处于空闲状态,而其它优先级队列可能存在大量积压数据无法处理的情况,进而导致服务器的资源得不到最大化利用,不仅造成系统资源的不必要浪费,而且会导致服务器响应不及时,影响用户体验的问题。


技术实现要素:

4.本发明的目的是提供一种基于线程池的优先队列调度方法,通过线程池限制优先级队列线程分配权重比例的方式在不同的数据处理期采用对应的线程分配规则动态调整各个优先级队列的工作线程,解决现有优先级线程无法动态调整导致系统资源无法最优化利用的技术问题,以实现基于优先级队列的实时数据缓冲量动态调整对应工作线程的分配数,使得服务器资源最大化利用,提高服务器响应速度,进而提升用户体验。
5.为了实现上述目的,有必要针对上述技术问题,提供了一种基于线程池的优先队列调度方法、系统、计算机设备和存储介质。
6.第一方面,本发明实施例提供了一种基于线程池的优先队列调度方法,所述方法包括以下步骤:初始化优先级线程池和优先级线程池对象,并监听应用数据投递请求;所述优先级线程池对象包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列;所述优先级线程池包括管理线程和若干个业务线程;响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据所述线程分配列表、所述未分配线程列表和各个优先级队列的数据缓存量,得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例;根据所述当前未分配线程数、所述当前优先级队列数据缓存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期;所述数据处理时期包括数据增长期、数据稳定期和数据减少期;根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述
拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程;所述线程分配规则包括数据增长期分配规则和数据减少期分配规则。
7.进一步地,所述根据所述当前未分配线程数、所述当前优先级队列数据缓存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期的步骤包括:判断所述当前未分配线程数、所述当前优先级队列数据缓存量和所述当前优先级队列线程分配比例是否满足第一预设条件和第二预设条件;若不满足所述第一预设条件且不满足所述第二预设条件,则判定所述数据处理时期为数据增长期;若满足所述第一预设条件,则判定所述数据处理时期为数据稳定期;若满足所述第二预设条件,则判定所述数据处理时期为数据减少期。
8.进一步地,所述第一预设条件为同时满足所述当前未分配线程数等于0、所述当前优先级队列数据缓存量大于业务线程总数,以及所述当前优先级队列线程分配比例符合稳定线程分配比例;所述第二预设条件为同时满足所述当前未分配线程数等于0、所述当前优先级队列数据缓存量小于业务线程总数,以及所述当前优先级队列线程分配比例符合稳定线程分配比例。
9.进一步地,所述根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程的步骤包括:若所述数据处理时期为所述数据增长期,则按照所述数据增长期分配规则为各个优先级队列动态分配工作线程,并更新所述线程分配列表和所述未分配线程列表,直至各个优先级队列的工作线程数符合所述稳定线程分配比例;若所述数据处理时期为所述数据稳定期,则将各个优先级队列的工作线程按照所述稳定线程分配比例维持不变;若所述数据处理时期为所述数据减少期,则按照所述数据减少期分配规则为各个优先级队列动态分配工作线程,并更新所述线程分配列表和所述未分配线程列表。
10.进一步地,由应用数据投递线程判断当前应用数据对应优先级队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若未达到,则将对应的优先级队列作为待拉取线程队列加入所述拉取线程队列,并将待拉取线程计数加1;由所述管理线程监听所述拉取线程队列,并在所述拉取线程计数不为0时,依次读取所述拉取线程队列中的待拉取线程队列,根据所述未分配线程列表为各个待拉取线程队列分配工作线程,以及在分配完成时,将所述待拉取线程计数作相应的减少更新;响应于每次应用数据处理完成,各个业务线程判断是否满足第一线程释放条件,若满足,则释放至未分配线程列表;所述第一线程释放条件为同时满足待拉取线程计数大于未分配线程列表长度、以及对应优先级队列的工作线程数已超过所述稳定线程分配比例对应的最大线程数。
11.进一步地,所述根据所述未分配线程列表为各个待拉取线程队列分配工作线程的步骤包括:
判断所述待拉取线程队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若达到,则将所述待拉取线程队列的工作线程数维持不变,反之,则根据所述未分配线程列表,得到当前未分配线程数;判断所述当前未分配线程数是否大于0,若是,则将所述未分配线程列表中任一线程分配至所述待拉取线程队列,并将所述待拉取线程计数减1。
12.进一步地,所述按照所述数据减少期分配规则为各个优先级队列动态分配工作线程的步骤包括:由应用数据投递线程判断当前应用数据对应优先级队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若未达到,则将对应的优先级队列作为待拉取线程队列加入所述拉取线程队列,并将待拉取线程计数加1;由所述管理线程监听所述拉取线程队列,并在所述拉取线程计数不为0时,依次读取所述拉取线程队列中的待拉取线程队列,并判断所述当前未分配线程数是否大于0,若是,则将所述未分配线程列表中任一线程分配至所述待拉取线程队列,并将所述待拉取线程计数减1;响应于每次应用数据处理完成,各个业务线程判断是否满足第二线程释放条件或线程拉取条件;若满足第二线程释放条件,则释放至未分配线程列表;所述第二线程释放条件为对应优先级队列的数据接收量与数据处理量的差值小于对应的工作线程数;若满足线程拉取条件,则将对应的优先级队列作为待拉取线程队列加入所述拉取线程队列,并将待拉取线程计数加1;所述线程拉取条件为对应优先级队列的数据缓存量大于对应的工作线程数。
13.第二方面,本发明实施例提供了一种基于线程池的优先队列调度系统,所述系统包括:初始化模块,用于初始化优先级线程池和优先级线程池对象,并监听应用数据投递请求;所述优先级线程池对象包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列;所述优先级线程池包括管理线程和若干个业务线程;请求处理模块,用于响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据所述线程分配列表、所述未分配线程列表和各个优先级队列的数据缓存量,得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例;处理期识别模块,用于根据所述当前未分配线程数、所述当前优先级队列数据缓存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期;所述数据处理时期包括数据增长期、数据稳定期和数据减少期;线程分配模块,用于根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程;所述线程分配规则包括数据增长期分配规则和数据减少期分配规则。
14.第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
15.第四方面,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
16.上述本技术提供了一种基于线程池的优先队列调度方法、系统、计算机设备及存储介质,通过所述方法,实现了初始化包括管理线程和若干个业务线程的优先级线程池和包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列的优先级线程池对象,并监听应用数据投递请求,响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据线程分配列表、未分配线程列表和各个优先级队列的数据缓存量得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例后,根据当前未分配线程数、当前优先级队列数据缓存量、当前优先级队列线程分配比例和稳定线程分配比例确定当前系统的数据处理时期,根据数据处理时期确定对应的线程分配规则,并通过管理线程和拉取线程队列按照线程分配规则为各个优先级队列动态分配工作线程的技术方案。与现有技术相比,该基于线程池的优先队列调度方法,通过线程池限制优先级队列线程分配权重比例的方式在不同的数据处理期采用对应的线程分配规则动态调整各个优先级队列的工作线程,实现基于优先级队列的实时数据缓冲量动态调整对应工作线程的分配数,使得服务器资源最大化利用,提高服务器响应速度,进而提升用户体验。
附图说明
17.图1是本发明实施例中基于线程池的优先队列调度方法的应用场景示意图;图2是本发明实施例中基于线程池的优先队列调度方法的流程示意图;图3是本发明实施例中基于线程池的优先队列调度的初始状态示意图;图4是本发明实施例中基于线程池的优先队列调度方法实现的线程分配的效果示意图;图5a和图5b分别表示本发明实施例中起始时仅有1种优先级数据和同时有3种优先级数据场景的数据增长期各个优先级队列的线程动态分配示意图;图6是本发明实施例中数据稳定期各个优先级队列的线程分配示意图;图7a和图7b表示本发明实施例中数据减少期两种场景下的各个优先级队列的线程动态分配示意图;图8是本发明实施例中基于线程池的优先队列调度系统的结构示意图;图9是本发明实施例中计算机设备的内部结构图。
具体实施方式
18.为了使本技术的目的、技术方案和有益效果更加清楚明白,下面结合附图及实施例,对本发明作进一步详细说明,显然,以下所描述的实施例是本发明实施例的一部分,仅用于说明本发明,但不用来限制本发明的范围。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.本发明提供的基于线程池的优先队列调度方法可应用于图1所示的并发处理多个终端应用数据的服务器上。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个服务器组成
的服务器集群来实现。服务器可根据本发明方法实时感知各个优先级数据量,并依此动态调整对应优先级队列的工作线程数,实现线程资源的最大化利用,有效避免应用数据积压,解决服务器响应不及时的问题;下述实施例将对本发明的基于线程池的优先队列调度方法进行详细说明。
20.在一个实施例中,如图2所示,提供了一种基于线程池的优先队列调度方法,包括以下步骤:s11、初始化优先级线程池和优先级线程池对象,并监听应用数据投递请求;所述优先级线程池对象包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列;所述优先级线程池包括管理线程和若干个业务线程;其中,管理线程可理解为线程池内通过监听拉取线程队列和未分配业务线程列表的动态,把未分配线程分配给具体的优先级队列的非业务处理线程;业务线程可理解为线程池内用于处理各个优先级应用数据的线程;对应优先级线程池的初始化方法可采用现有技术实现,此处不作具体限制;本实施例中的优先级队列是根据实际应用需求设定的用于处理各个优先级数据的队列,其数量与应用数据的优先级种类对应;稳定线程分配比例可理解为接入系统的各个优先级的应用数据量处于稳定状态时各个优先级队列的工作线程比例,对应各优先级队列的工作线程的占比可根据实际应用需求确定,此处不作具体限制;如图3所示,线程分配列表可理解为记录线程池内业务线程分配情况的列表,初始化为所有业务线程为未分配状态的列表,后续在接入应用数据的过程中动态调整,未分配线程列表可理解为记录线程池内处于空闲的未分配业务线程的列表,初始化包括所有业务线程的列表;拉取线程队列可理解为用于实时记录需要拉取线程的优先级队列,便于管理线程及时感知待拉取线程队列,及时合理调整工作线程分配的,区别于用于存储应用数据的优先级队列,可将其初始为空闲状态队列。
21.s12、响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据所述线程分配列表、所述未分配线程列表和各个优先级队列的数据缓存量,得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例;其中,各个优先级队列的数据缓存量可理解为根据队列接收量和处理量来计算,进而统计得到系统各个时刻的当前优先级队列数据缓存量;当前未分配线程数如上文所述是根据当前未分配线程列表统计得到的当前应用数据投递时刻的未分配线程数,当前优先级队列线程分配比例是根据实时获取的线程分配列表计算得到的各个优先级队列的工作线程比例。
22.s13、根据所述当前未分配线程数、所述当前优先级队列数据缓存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期;所述数据处理时期包括数据增长期、数据稳定期和数据减少期;其中,数据增长期可理解为各个优先级队列的应用数据缓存量从0逐渐增加的过程,此阶段的当前未分配线程数从业务线程总数逐渐减至0,当前优先级队列数据缓存量逐渐从小于业务线程总数到超过业务线程总数,以及当前优先级队列线程分配比例从部分优先级队列线程数占比为0逐渐增至稳定线程分配比例对应的最大线程数;数据稳定期可理解为各个优先级队列的应用数据缓存量基
本保持不变的持续稳定时期;数据减少期可理解为数据稳定期过后各个优先级队列的应用数据逐渐处理完成的阶段。
23.本实施例基于系统性能开销和线程资源利用最大化的综合考虑,根据每个数据处理阶段优先级队列的应用数据缓存情况的区别,设置了自动识别各个数据处理时期的触发条件;具体地,所述根据所述当前未分配线程数、所述当前优先级队列数据缓存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期的步骤包括:判断所述当前未分配线程数、所述当前优先级队列数据缓存量和所述当前优先级队列线程分配比例是否满足第一预设条件和第二预设条件;其中,所述第一预设条件为同时满足所述当前未分配线程数等于0、所述当前优先级队列数据缓存量大于业务线程总数,以及所述当前优先级队列线程分配比例符合稳定线程分配比例;所述第二预设条件为同时满足所述当前未分配线程数等于0、所述当前优先级队列数据缓存量小于业务线程总数,以及所述当前优先级队列线程分配比例符合稳定线程分配比例;若不满足所述第一预设条件且不满足所述第二预设条件,则判定所述数据处理时期为数据增长期;若满足所述第一预设条件,则判定所述数据处理时期为数据稳定期;若满足所述第二预设条件,则判定所述数据处理时期为数据减少期。
24.通过上述方法步骤识别系统的数据处理时期为数据增长期时,就需要逐步将各个优先级队列的工作线程数调整至预设的稳定线程分配比例,以保证各个优先级的应用数据得以正常有序处理,保证用户体验的同时最大化利用线程资源;同理,当识别系统的数据处理时期为数据减少期时,就需要及时感知各个优先队列的缓存数据量变化,按照实际需求合理的释放或拉取线程,以保证应用数据即将处理完成的优先级队列不过多占用线程资源,应用数据处理完成的优先级队列不占用线程资源,为数据量较大的优先级队列分配尽可能多的线程,以总体提升数据处理效率。基于此,本实施例优选地,根据不同数据处理时期针对性设定合理的工作线程调整方式,按照下述步骤动态调整线程资源分配,以保证高优先级数据优先处理的同时,合理动态进行资源调度保证效率最大化。
25.s14、根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程;所述线程分配规则包括数据增长期分配规则和数据减少期分配规则。
26.具体地,所述根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程的步骤包括:若所述数据处理时期为所述数据增长期,则按照所述数据增长期分配规则为各个优先级队列动态分配工作线程,并更新所述线程分配列表和所述未分配线程列表,直至各个优先级队列的工作线程数符合所述稳定线程分配比例;此阶段将优先级处理线程调整至稳定线程分配比例的关键在于如何实现线程在不同优先级队列间的调整,达到图4所示的分配结果;其中,数据增长期分配规则可理解为是基于各个优先级队列的线程分配权重结合各优先级队列的数据缓存量按照下述公式分配:
其中,表示业务线程总数,表示第i个优先级队列的预设线程分配权重;表示t时刻存在应用数据的优先级队列的预设线程分配权重和;表示t时刻第i个优先级队列的初始线程分配数;上述公式计算得到的初始线程分配数可能不是整数,如果小数点后没有数字,则按照此结果分配,如果有小数,则按计算结果的四舍五入值进行分配。若通过上述方法计算有业务线程没有分配出去时,则先计算各个优先级队列当前未处理数据除以优先级队列当前分配工作线程总数的结果,并将剩余未分配线程按照结果由大到小的顺序进行分配。下面将以图4为例对动态分配过程进行详细说明:如图4所示,业务线程总数是6,中间图的第一个优先级队列的预设线程分配权重,第三个优先级队列的预设线程分配权重,权重和是优先级1+优先级3的结果是4,则第一优先级队列分配的线程总数是:,第三优先级队列分配的线程总数:,即初始分配结果为:第一优先级队列分配4个线程,第三优先级队列分配1个线程,剩余1个线程未分配;若此时,第一优先级队列的未处理缓存数据为6,分配线程数为4,第三优先级队列的未处理缓存数据为6,分配线程数为1,则第一优先级队列除的结果是1.5,第三优先级队列除的结果是6;所以,剩余的1个线程应分配给第三优先级队列,即最后的分配结果就是第一优先级队列分配4个线程,第三优先级队列分配2个线程;需要说明的是,此处业务线程总数,优先级队列的预设线程分配权重以及分配时各队列缓存数据量仅为示例性描述,不对保护范围作具体限制;具体地,所述按照所述数据增长期分配规则为各个优先级队列动态分配工作线程的步骤包括:由应用数据投递线程判断当前应用数据对应优先级队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若未达到,则将对应的优先级队列作为待拉取线程队列加入所述拉取线程队列,并将待拉取线程计数加1;其中,应用数据投递线程可理解为系统原有的负责接收应用层发送的应用数据,并对接收到的应用数据解析按照数据所属的优先级投递至对应的优先级队列等待线程调度处理的线程;本实施例中的应用数据投递线程在将各个优先级的应用数据投递到对应的优先级队列后,需要判断当前投递优先级队列的工作线程是否已达到稳定线程分配比例对应的最大线程数,若没有达到最大线程数,则应用数据投递线程会把当前优先级队列投递到到拉取线程队列表示该优先级队列需要拉取业务线程,就会由管理线程进行线程拉取分配;需要说明的是,在实际应用数据投递过程中,可能会存在不同的应用数据投递线程同时往同一个优先级队列投递数据的情况,为了避免不必要的重复检查,可为每个优先级队列设置一个对应的检查开关,应用数据投递线程在进行检查前,需要判断开关的状态:若开关状态是关闭,则表示有其它线程正在进行检查,那当前应用数据投递线程就不必进行检查处理,可直接跳过检查;反之,则表示是可以进行检查,进入相应的检查方法,同时把开关关上,执行检查过程,检查设置完成后再把开关打开。此外,应用数据投递线程将某个
优先级队列加入拉取线程队列仅表示该优先级队列需要拉取线程,并不代表一定会给该优先级队列分配线程,具体是否分配线程需要由管理线程根据各个优先级队列的数据缓存量、稳定线程分配比例对应的最大线程数、当前分配的工作线程数、以及线程池内未分配的业务线程数决定是否为该优先级队列拉取线程。
27.由所述管理线程监听所述拉取线程队列,并在所述拉取线程计数不为0时,依次读取所述拉取线程队列中的待拉取线程队列,根据所述未分配线程列表为各个待拉取线程队列分配工作线程,以及在分配完成时,将所述待拉取线程计数作相应的减少更新;具体地,所述根据所述未分配线程列表为各个待拉取线程队列分配工作线程的步骤包括:判断所述待拉取线程队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若达到,则将所述待拉取线程队列的工作线程数维持不变,反之,则根据所述未分配线程列表,得到当前未分配线程数;判断所述当前未分配线程数是否大于0,若是,则将所述未分配线程列表中任一线程分配至所述待拉取线程队列,并将所述待拉取线程计数减1。
28.响应于每次应用数据处理完成,各个业务线程判断是否满足第一线程释放条件,若满足,则释放至未分配线程列表;所述第一线程释放条件为同时满足待拉取线程计数大于未分配线程列表长度、以及对应优先级队列的工作线程数已超过所述稳定线程分配比例对应的最大线程数;其中,第一线程释放条件可理解为当前优先级队列分配的工作线程已超过了该优先级应该分配的最大工作线程数了,在其他优先级队列也达到一定的数据量时,需要将超过比例的线程逐渐释放出来。
29.如图5a和5b所示,通过上述动态调整步骤就可以实现数据增长期内为各个优先级队列动态分配工作线程,直至达到图6所示的稳定线程分配比例的效果。
30.若所述数据处理时期为所述数据稳定期,则将各个优先级队列的工作线程按照所述稳定线程分配比例维持不变;其中,数据稳定期对应维持稳定线程分配比例不变的具体方法可以理解为:管理线程会被需要拉取线程的优先级队列阻塞,此时需要拉取线程计数是0,未分配线程列表内未分配线程数也是0,则数据增长期内给出的第一线程释放条件不满足,各个优先级队列的工作线程都不会主动释放,即各个优先级队列的工作线程按照稳定线程分配比例维持不变,直至某个优先级队列的数据缓存量逐渐减少就会认为是进入下一个阶段的数据减少期,则需要按照下述步骤对各个优先级队列的工作线程进行动态调整;需要说明的是,在数据稳定期内应用数据投递线程和个业务线程的处理仍与上述数据增长期的处理一致,此处不再赘述。
31.若所述数据处理时期为所述数据减少期,则按照所述数据减少期分配规则为各个优先级队列动态分配工作线程,并更新所述线程分配列表和所述未分配线程列表;其中,数据减少期分配规则与数据增长期分配规则的不同之处在于,考虑到会存在有的优先级队列缓存数据逐渐处理完成,而其他优先级队列存在数据积压的情况,本实施例增加了由各个优先级队列的业务线程在处理完每个应用数据后,会自检是否需要继续拉取线程或需要释放空闲线程;具体地,如图7a和图7b所示,所述按照所述数据减少期分配规则为各个优先级队列动态分配工作线程的步骤包括:由应用数据投递线程判断当前应用数据对应优先级队列的工作线程数是否达到所述稳定线程分配比例对应的最大线程数,若未达到,则将对应的优先级队列作为待拉取
线程队列加入所述拉取线程队列,并将待拉取线程计数加1;由所述管理线程监听所述拉取线程队列,并在所述拉取线程计数不为0时,依次读取所述拉取线程队列中的待拉取线程队列,并判断所述当前未分配线程数是否大于0,若是,则将所述未分配线程列表中任一线程分配至所述待拉取线程队列,并将所述待拉取线程计数减1;响应于每次应用数据处理完成,各个业务线程判断是否满足第二线程释放条件或线程拉取条件;若满足第二线程释放条件,则释放至未分配线程列表;所述第二线程释放条件为对应优先级队列的数据接收量与数据处理量的差值小于对应的工作线程数;若满足线程拉取条件,则将对应的优先级队列作为待拉取线程队列加入所述拉取线程队列,并将待拉取线程计数加1;所述线程拉取条件为对应优先级队列的数据缓存量大于对应的工作线程数。
32.需要说明的是,数据减少期内应用数据投递线程的工作与数据增长期和数据稳定期保持一致,此处不作赘述;需要注意的是,此期间的管理线程在拉取线程时不再考虑是否超过稳定线程分配比例对应的最大线程数且增加了业务线程自检确定是否拉取线程和释放线程的工作。
33.本技术实施例通过初始化包括管理线程和若干个业务线程的优先级线程池和包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列的优先级线程池对象,并监听应用数据投递请求,并在应用数据投递线程接收到各个优先级应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据线程分配列表、未分配线程列表和各个优先级队列的数据缓存量得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例后,根据当前未分配线程数、当前优先级队列数据缓存量、当前优先级队列线程分配比例和稳定线程分配比例确定当前系统的数据处理时期,根据数据处理时期确定对应的线程分配规则,并通过管理线程和拉取线程队列按照线程分配规则为各个优先级队列动态分配工作线程的技术方案,采用线程池限制优先级队列线程分配权重比例,在不同的数据处理期对有数据的优先级队列基于预设线程分配权重选用对应的线程分配规则动态调整各个优先级队列的工作线程,实现根据各个优先级队列的实时数据缓冲量动态调整对应工作线程的分配数,使得服务器资源最大化利用,提高服务器响应速度,进而提升用户体验的技术效果。
34.在一个实施例中,如图8所示,提供了一种基于线程池的优先队列调度系统,所述系统包括:初始化模块1,用于初始化优先级线程池和优先级线程池对象,并监听应用数据投递请求;所述优先级线程池对象包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列;所述优先级线程池包括管理线程和若干个业务线程;请求处理模块2,用于响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据所述线程分配列表、所述未分配线程列表和各个优先级队列的数据缓存量,得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例;处理期识别模块3,用于根据所述当前未分配线程数、所述当前优先级队列数据缓
存量、所述当前优先级队列线程分配比例和所述稳定线程分配比例,确定当前系统的数据处理时期;所述数据处理时期包括数据增长期、数据稳定期和数据减少期;线程分配模块4,用于根据所述数据处理时期,确定对应的线程分配规则,并通过所述管理线程和所述拉取线程队列,按照所述线程分配规则为各个优先级队列动态分配工作线程;所述线程分配规则包括数据增长期分配规则和数据减少期分配规则。
35.关于基于线程池的优先队列调度系统的具体限定可以参见上文中对于基于线程池的优先队列调度方法的限定,在此不再赘述。上述基于线程池的优先队列调度系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
36.图9示出一个实施例中计算机设备的内部结构图,该计算机设备具体可以是终端或服务器。如图9所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示器和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现基于线程池的优先队列调度方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
37.本领域普通技术人员可以理解,图9中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有同的部件布置。
38.在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法的步骤。
39.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法的步骤。
40.综上,本发明实施例提供的一种基于线程池的优先队列调度方法、系统、计算机设备及存储介质,其基于线程池的优先队列调度方法实现了初始化包括管理线程和若干个业务线程的优先级线程池和包括若干个优先级队列、稳定线程分配比例、线程分配列表、未分配线程列表、拉取线程队列的优先级线程池对象,并监听应用数据投递请求,响应于应用数据投递请求,将各个应用数据按照优先级添加至对应的优先级队列并更新相应的数据缓存量,以及根据线程分配列表、未分配线程列表和各个优先级队列的数据缓存量得到当前未分配线程数、当前优先级队列数据缓存量和当前优先级队列线程分配比例后,根据当前未分配线程数、当前优先级队列数据缓存量、当前优先级队列线程分配比例和稳定线程分配比例确定当前系统的数据处理时期,根据数据处理时期确定对应的线程分配规则,并通过管理线程和拉取线程队列按照线程分配规则为各个优先级队列动态分配工作线程的技术方案,该方法通过线程池限制优先级队列线程分配权重比例的方式在不同的数据处理期采用对应的线程分配规则动态调整各个优先级队列的工作线程,实现基于优先级队列的实时数据缓冲量动态调整对应工作线程的分配数,使得服务器资源最大化利用,提高服务器响
应速度,进而提升用户体验。
41.本说明书中的各个实施例均采用递进的方式描述,各个实施例直接相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。需要说明的是,上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
42.以上所述实施例仅表达了本技术的几种优选实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本技术的保护范围。因此,本技术专利的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1