一种调整线程数的方法及装置制造方法及图纸

技术编号:20221542 阅读:24 留言:0更新日期:2019-01-28 20:07
一种调整线程数的方法及装置,用以实现根据任务数量对线程数量的动态调整,以达到快速处理任务和节省资源之间的动态平衡。该方法包括:采集第一数量和第二数量,所述第一数量为线程池的任务队列中任务的数量,所述第二数量为所述线程池中线程的数量,所述线程用于处理所述任务,根据所述第一数量和所述第二数量,确定所述线程池的状态,所述状态包括空闲状态或繁忙状态,所述空闲状态为所述第一数量小于所述第二数量的状态,所述繁忙状态为所述第一数量大于所述第二数量的状态,若确定所述线程池的状态为繁忙状态,则增加所述线程池中线程的数量,若确定所述线程池的状态为空闲状态,则减少所述线程池中线程的数量。

【技术实现步骤摘要】
一种调整线程数的方法及装置
本申请涉及计算机
,尤其涉及一种调整线程数的方法及装置。
技术介绍
目前,针对多任务同时处理可采用线程池技术,在同一时刻利用不同线程处理不同任务,达到同时处理多个任务的目的。采用线程池技术,在初始化时可在线程池中创建多个线程和一个任务队列,当有多个任务需要执行时,会将多个任务推入到任务队列中,并从线程池中选择多个空闲的线程分别执行多个任务,当该多个任务执行完毕后,将执行该多个任务的多个线程的状态置为空闲,并将该多个线程再放入线程池中,以使其可以被派发执行新的任务。现有技术中,线程池初始化之后创建的线程数量是固定值。当任务队列中任务较少,线程池中存在较多空闲线程时,会导致线程资源的浪费,反之,当任务队列中任务较多,线程池中空闲线程不足时,又会导致任务处理速度变慢。
技术实现思路
本申请实施例提供一种调整线程数的方法及装置,用以实现根据任务数量对线程数量的动态调整,以达到快速处理任务和节省资源之间的动态平衡。第一方面,本申请实施例提供一种调整线程数的方法,该方法包括:采集第一数量和第二数量,第一数量为线程池的任务队列中任务的数量,第二数量为线程池中线程的数量,线程用于处理任务,在采集到第一数量和第二数量之后,可根据第一数量和第二数量确定线程池的状态,该状态包括空闲状态或繁忙状态,空闲状态为第一数量小于第二数量的状态,繁忙状态为第一数量大于第二数量的状态,若确定线程池的状态为繁忙状态,则增加线程池中线程的数量,若确定线程池的状态为空闲状态,则减少线程池中线程的数量。通过上述方法,可根据线程池中任务数量和线程数量确定线程池的状态,进而根据线程池的状态动态调整线程的数量,以使线程池中任务数量与线程数量均衡,从而达到快速处理任务和节省资源之间的动态平衡。在一种可能的设计中,在第一数量和第二数量的比值小于第一预设值时,则可以确定线程池的状态为空闲状态,在第一数量和第二数量的比值大于第二预设值时,则可以确定线程池的状态为繁忙状态,其中,第一预设值为小于或等于1的正数,第二预设值为大于或等于1的正数。通过第一预设值和第二预设值确定线程池的状态,可以较为合理的划分线程池的空闲状态和繁忙状态。在一种可能的设计中,可将繁忙状态进一步细分为一级繁忙状态、二级繁忙状态以及三级繁忙状态。在该种设计中,若比值大于第二预设值且小于第三预设值,则可以确定线程池的状态为一级繁忙状态,若比值大于等于第三预设值且小于第四预设值,则可以确定线程池的状态为二级繁忙状态,若比值大于或等于第四预设值,则可以确定线程池的状态为三级繁忙状态,其中,第三预设值为大于第二预设值的正数,第四预设值为大于第三预设值的正数。这样,后续可根据线程池的繁忙状态进一步确定线程池的繁忙程度,以便做出合理决策。其中,上述第一预设值、第二预设值、第三预设值和第四预设值可以根据预先学习经验确定,或者通过各种仿真模拟方式来确定,本申请不做限定。在一种可能的设计中,第一数量和第二数量按周期采集,针对每个周期确定线程池的状态,状态与积分数值具备对应关系,一级繁忙状态、二级繁忙状态以及三级繁忙状态对应的积分数值为正数,空闲状态对应的积分数值为负数。在该种设计中,针对当前周期确定线程池的状态之后,还包括:根据状态与积分数值的对应关系,以及针对当前周期确定的线程池的状态,确定与当前周期确定的线程池的状态对应的第一积分数值,将第一积分数值和历史积分数值之和,确定为与针对当前周期确定的线程池的状态对应的第二积分数值,其中历史积分数值是指针对当前周期之前的每个周期确定的与线程池的状态对应的积分数值之和。这样,若确定第二积分数值大于或等于第五预设值,则在线程池中增加第一预设数量个线程。若确定第二积分数值小于或等于第六预设值,则减少线程池中第二预设数量个线程,第五预设值为正数,第六预设值为负数。其中,上述第五预设值、第六预设值、第一预设数量和第二预设数量也可以根据预先学习经验确定,或者通过各种仿真模拟方式来确定,本申请不做限定。这样,通过将线程池的状态与积分对应,进而可根据积分值判断线程池的繁忙程度,当积分值达到阀值时调整线程池中的线程数量,可平滑的创建或销毁线程。且,该方法不仅考虑当前周期下线程池的状态对应的积分值,还将当前周期之前的周期统计的积分值考虑在内,可使线程数量调整过程尽量平滑,避免频繁创建和销毁线程带来额外开销。在一种可能的设计中,第一预设数量和第二预设数量可以均为一。通过该方法,将每次增加或减少的线程数设为1,可使线程数量调整过程尽量平滑,避免频繁创建和销毁线程带来额外开销。在一种可能的设计中,本申请还可以执行下述操作中的任意一种或多种:在确定第一积分数值为正数,且历史积分数值为负数时,可将历史积分数值置零;或者,在确定第一积分数值为负数,且历史积分数值为正数时,可将历史积分数值置零;或者,在确定历史积分数值大于或等于第五预设值时,可将历史积分数值置零;或者,在确定历史积分数值小于或等于第六预设值时,可将历史积分数值置零;或者,在确定第二积分数值大于或等于第五预设值,且当前线程池中的线程数量等于预设的最大线程数量时,可将当前状态对应的第二积分数值置零;或者,在确定第二积分数值小于或等于第六预设值,且当前线程池中的线程数量等于预设的最小线程数量时,可将当前状态对应的第二积分数值置零。一些场景下线程池的状态不会持续的保持在空闲状态或繁忙状态,而是在空闲状态和繁忙状态之间进行迁移。针对该些场景,采用上述方法可根据第一积分数值和历史积分数值的符号,确定线程池的状态是否在空闲状态和繁忙状态之间进行迁移,由于上述方法中设置繁忙状态对应的积分数值为正数,空闲状态对应的积分数值为负数,故当第一积分数值和历史积分数值的符号(正负)不同时,可确定线程池的状态在空闲状态和繁忙状态之间进行迁移,进而可将历史积分数值清零,重新计算第二积分值,可避免频繁的创建和销毁线程。此外,若历史积分数值或第二积分数值超过调整线程数的预设阈值,则将历史积分数值或第二积分数值清零,避免后续计算出错。在一种可能的设计中,还可以在确定当前线程池中包括的线程数量小于预设的最大线程数量时,再在线程池中增加第一预设数量个线程;或者,还可以在确定当前线程池中包括的线程数量大于预设的最小线程数量时,再减少线程池中第二预设数量个线程。这样,可避免线程数超过用户设置的阈值。第二方面,本申请实施例提供一种调整线程数的装置,包括用于执行以上第一方面各个步骤的单元或手段(means)。第三方面,本申请实施例提供一种调整线程数的装置,包括至少一个处理器和存储器,所述存储器存储有计算机程序,所述至少一个处理器用于调用所述计算机程序执行以上第一方面提供的方法。第四方面提供一种计算机可读存储介质,其上存储有一些指令,这些指令被计算机调用执行时,可以使得计算机完成上述第一方面、第一方面的任意一种可能的设计中所涉及的方法。第五方面提供一种计算机程序产品,该计算机程序产品在被计算机调用执行时可以完成第一方面以及上述第一方面任意可能的设计中所涉及的方法。附图说明图1为本申请实施例提供的一种线程池实现方案;图2为本申请实施例提供的一种系统架构示意图;图3为本申请实施例提供的一种调整线程数的方法流程示意图;图4为本申请实施例提本文档来自技高网...

【技术保护点】
1.一种调整线程数的方法,其特征在于,包括:采集第一数量和第二数量,所述第一数量为线程池的任务队列中任务的数量,所述第二数量为所述线程池中线程的数量,所述线程用于处理所述任务;根据所述第一数量和所述第二数量,确定所述线程池的状态,所述状态包括空闲状态或繁忙状态,所述空闲状态为所述第一数量小于所述第二数量的状态,所述繁忙状态为所述第一数量大于所述第二数量的状态;若确定所述线程池的状态为繁忙状态,则增加所述线程池中线程的数量;若确定所述线程池的状态为空闲状态,则减少所述线程池中线程的数量。

【技术特征摘要】
1.一种调整线程数的方法,其特征在于,包括:采集第一数量和第二数量,所述第一数量为线程池的任务队列中任务的数量,所述第二数量为所述线程池中线程的数量,所述线程用于处理所述任务;根据所述第一数量和所述第二数量,确定所述线程池的状态,所述状态包括空闲状态或繁忙状态,所述空闲状态为所述第一数量小于所述第二数量的状态,所述繁忙状态为所述第一数量大于所述第二数量的状态;若确定所述线程池的状态为繁忙状态,则增加所述线程池中线程的数量;若确定所述线程池的状态为空闲状态,则减少所述线程池中线程的数量。2.如权利要求1所述的方法,其特征在于,根据所述第一数量和所述第二数量,确定所述线程池的状态,包括:若所述第一数量和所述第二数量的比值小于第一预设值,则确定所述线程池的状态为所述空闲状态;若所述第一数量和所述第二数量的比值大于第二预设值,则确定所述线程池的状态为所述繁忙状态;其中,所述第一预设值为小于或等于1的正数,所述第二预设值为大于或等于1的正数。3.如权利要求2所述的方法,其特征在于,所述繁忙状态包括一级繁忙状态、二级繁忙状态以及三级繁忙状态;若所述第一数量和所述第二数量的比值大于第二预设值,则确定所述线程池的状态为所述繁忙状态,包括:若所述比值大于所述第二预设值且小于第三预设值,则确定所述线程池的状态为所述一级繁忙状态;若所述比值大于等于所述第三预设值且小于第四预设值,则确定所述线程池的状态为所述二级繁忙状态;若所述比值大于或等于所述第四预设值,则确定所述线程池的状态为所述三级繁忙状态;其中,所述第三预设值为大于所述第二预设值的正数,所述第四预设值为大于所述第三预设值的正数。4.如权利要求3所述的方法,其特征在于,所述第一数量和所述第二数量按周期采集,针对每个所述周期确定所述线程池的状态,所述状态与积分数值具备对应关系,所述一级繁忙状态、所述二级繁忙状态以及所述三级繁忙状态对应的积分数值为正数,所述空闲状态对应的积分数值为负数;针对当前周期确定所述线程池的状态之后,还包括:根据所述对应关系,以及针对当前周期确定的所述线程池的状态,确定与所述线程池的状态对应的第一积分数值;将所述第一积分数值和历史积分数值之和,确定为与针对当前周期确定的所述线程池的状态对应的第二积分数值,所述历史积分数值是指针对当前周期之前的每个周期确定的与所述线程池的状态对应的积分数值之和;若确定所述线程池的状态为繁忙状态,则增加所述线程池中线程的数量,包括:若所述第二积分数值大于或等于第五预设值,则在所述线程池中增加第一预设数量个线程;若确定所述线程池的状态为空闲状态,则减少所述线程池中线程的数量,包括:若所述第二积分数值小于或等于第六预设值,则减少所述线程池中第二预设数量个线程,所述第五预设值为正数,所述第六预设值为负数。5.如权利要求4所述的方法,其特征在于,所述第一预设数量和所述第二预设数量均为一。6.如权利要求4或5所述的方法,其特征在于,还包括:若确定所述第一积分数值为正数,且所述历史积分数值为负数,则将所述历史积分数值置零;或者,若确定所述第一积分数值为负数,且所述历史积分数值为正数,则将所述历史积分数值置零;或者,若确定所述历史积分数值大于或等于所述第五预设值,则将所述历史积分数值置零;或者,若确定所述历史积分数值小于或等于所述第六预设值,则将所述历史积分数值置零;或者,若确定所述第二积分数值大于或等于所述第五预设值,且当前所述线程池中的线程数量等于预设的最大线程数量,则将所述当前状态对应的所述第二积分数值置零;或者,若确定所述第二积分数值小于或等于所述第六预设值,且当前所述线程池中的线程数量等于预设的最小线程数量,则将所述当前状态对应的所述第二积分数值置零。7...

【专利技术属性】
技术研发人员:李鹏
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

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

1