首页> 中国专利> 任务执行及调整线程池中保留线程的数量的方法和装置

任务执行及调整线程池中保留线程的数量的方法和装置

摘要

本发明公开了一种任务执行及调整线程池中保留线程的数量的方法和装置,所述方法包括:周期性统计周期内非任务操作的频次;根据本周期内统计的非任务操作的频次,确定出下个周期的线程池中保留线程的数量;将确定出的下个周期的线程池中保留线程的数量与当前线程池中保留线程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得到下个周期的数量调整后的保留线程;利用上述方法周期性调整保留线程数量的线程池执行任务,能够降低线程池工作过程中非任务操作的系统资源消耗,保证对任务的响应速度,还减小占用的系统资源。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-01-18

    授权

    授权

  • 2014-02-26

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20130605

    实质审查的生效

  • 2013-08-28

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种基于调整线程池中保留线程 的数量的任务执行技术。

背景技术

目前服务器、交换机、移动通讯终端等设备的操作系统或应用程序等软 件常常需要在单位时间内处理数目巨大的任务请求,但单个任务处理时间却 相对较短。传统多线程方案,采用“即时创建,即时销毁”的策略:一旦接 受到任务之后,立即创建一个新的线程,由该线程执行任务;任务执行完毕 后,线程退出。尽管与创建进程相比,创建线程的时间已经大大的缩短,但 是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么创 建、销毁线程等非任务操作所消耗的系统资源不可忽略,甚至会若干倍于执 行任务本身所消耗的系统资源,导致系统资源被大量非任务操作所消耗,不 但任务程序响应速度低下,同时影响同一服务器上其它软件的运行。

因此在软件中引入线程池技术,通过重复利用已创建的线程降低线程创 建和销毁造成的消耗来降低系统资源消耗;当任务到达时,任务可以不需要 等到线程创建就能被执行来提高响应速度。采用线程池技术的软件都一般具 备下面几个组成部分:

线程池管理器:用于创建并管理线程池中的线程和其它功能单元。

工作线程:线程池中实际执行任务的线程。

任务接口:线程池接受任务的功能单元。

任务队列:保存待工作线程执行的任务的功能单元,其中,任务是按照 先入先出原则排序的。

在采用线程池技术的软件启动之后,线程池管理器在线程池中立即预创 建一定数量的工作线程作为保留线程,并将其标识为空闲。线程池管理器通 过任务接口接受任务后,选择任一个空闲的保留线程,把任务传入此线程中 执行。当保留线程都在执行任务时,线程池管理器会把任务存放在任务队列 中;当任务队列没有剩余空间时,线程池管理器自动新创建一定数量的工作 线程作为扩展线程,用于处理更多的任务。在任务执行完毕后线程也不立即 退出,而是继续保持在池中等待下一次的任务。扩展线程在空闲一段时间后, 被线程池管理器销毁,回收系统资源;保留线程在空闲一段时间后,被线程 池管理器标识为空闲但不销毁。

现有线程池的技术方案中,保留线程数量一般都是固定的,少数情况下 可以手动调整,但需要重启采用线程池技术的软件,都无法自动地调整保留 线程的数量。由于任务数量的波动无法预测,当某一时间段内线程池的任务 接口接受到大量任务时,保留线程在指定时限内来不及处理这些任务,则线 程池管理器需要执行较多的任务队列操作,还需要创建较多数量的扩展线程; 当任务数量回落时并保持一段时间,扩展线程空闲,则线程池管理器需要销 毁扩展线程,部分保留线程也有可能空闲。

综上所述,现有技术的线程池中保留线程数量固定的技术方案,在任务 数量多时,会增加非任务操作对系统资源的消耗,降低对任务的响应速度; 在任务数量少时,多余的空闲的保留线程会占用较多的系统资源。

发明内容

本发明的实施例提供了一种任务执行及线程池的保留线程的调整方法和 装置,用以应对数量变化的任务,以占用或消耗较少的系统资源,保证对任 务的响应速度。

本发明的技术方案提高一种调整线程池中保留线程的数量的方法,包括:

周期性统计周期内非任务操作的频次;并

根据本周期内统计的非任务操作的频次,确定出下个周期的线程池中保 留线程的数量;

将确定出的下个周期的线程池中保留线程的数量与当前线程池中保留线 程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得到下个 周期的数量调整后的保留线程;

较佳地,所述非任务操作包括:扩展线程操作;其中,所述扩展线程操 作具体包括:创建扩展线程和销毁扩展线程的操作。

较佳地,所述非任务操作还包括:任务队列操作;其中,所述任务队列 操作具体为将任务存放到任务队列中的操作。

较佳地,所述周期性统计周期内非任务操作的频次,具体包括:

每个周期开始时,将本周期的非任务操作频次清0;

在本周期内,对当前线程池执行数量变化的任务过程中的非任务操作频 次进行统计。

较佳地,所述根据本周期内统计的非任务操作频次,确定出下个周期的 线程池中保留线程的数量,具体包括:

将所述本周期内统计的非任务操作频次与若干个频次阈值进行比较:

若存在小于所述非任务操作频次的频次阈值,则确定出小于所述非任务 操作频次的各频次阈值中最大的频次阈值,将该最大的频次阈值对应的保留 线程建议数量作为下个周期的线程池中保留线程的数量;

否则,将本周期的非空闲的保留线程数量作为下个周期的线程池中保留 线程的数量;

或者,所述根据本周期内统计的非任务操作频次,确定出下个周期的线 程池中保留线程的数量,具体包括:

将所述本周期分解成n个子周期,n为自然数,所述本周期内统计的非任 务操作频次分解成n个子周期内分别统计的n个非任务操作子频次;将n个 所述非任务操作子频次分别与若干个频次阈值进行比较:

若存在小于n个所述非任务操作子频次的频次阈值,则确定出小于n个 所述非任务操作子频次的各频次阈值中最大的频次阈值,将该最大的频次阈 值对应的保留线程建议数量作为下个周期的线程池中保留线程的数量;

否则,将本周期的非空闲的保留线程数量作为下个周期的线程池中保留 线程的数量;

其中,所述各频次阈值及其对应的保留线程建议数量为预先设定的自然 数。

较佳地,所述将确定出的下个周期的线程池中保留线程的数量与当前线 程池中保留线程的数量进行比较,根据比较结果调整当前线程池中的保留线 程,得到下个周期的数量调整后的保留线程,具体包括:

计算所述确定出的下个周期的线程池中保留线程的数量与当前线程池的 保留线程数量的差值;

若计算出的差值大于0,则在所述线程池中创建与所述差值相应个数的保 留线程;若计算出的差值小于0,则将所述线程池中与所述差值相应个数的保 留线程销毁。

本发明的技术方案还提供一种任务执行方法,包括:

线程池管理器接受到任务后,判断当前线程池中是否有空闲的保留线程;

若有,则将该任务分配给其中一个空闲的保留线程执行;否则:

所述线程池管理器判断当前线程池的任务队列是否有剩余空间;若有剩 余空间,则所述线程池管理器将任务存放到任务队列中;若没有剩余空间, 则所述线程池管理器在所述线程池中创建设定数量的扩展线程,并把任务队 列中的待执行任务分配给所述扩展线程执行;

其中,所述线程池中的保留线程的数量是根据如下方法进行调整的:

周期性统计周期内非任务操作的频次;

根据本周期内统计的非任务操作的频次,确定出下个周期的线程池中保 留线程的数量;

将确定出的下个周期的线程池中保留线程的数量与当前线程池中保留线 程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得到下个 周期的数量调整后的保留线程。

本发明的技术方案还提供了一种调整线程池中保留线程的数量的装置, 包括:

非任务操作频次统计单元,用于周期性统计周期内非任务操作的频次;

下周期保留线程数量确定单元,用于根据非任务操作频次统计单元确定 出的本周期的非任务操作的频次,确定出下个周期的线程池中保留线程的数 量;

下周期保留线程调整单元,用于将下周期保留线程数量确定单元确定出 的下个周期的线程池中保留线程的数量与当前线程池中保留线程的数量进行 比较,根据比较结果调整当前线程池中的保留线程,得到下个周期的数量调 整后的保留线程。

本发明的技术方案还提供了一种任务执行的装置,包括:

任务管理模块,用于接受到任务后,判断当前线程池中是否有空闲的保 留线程;若有,则把该任务分配给其中一个空闲的保留线程执行;否则:

判断当前线程池的任务队列是否有剩余空间;若有所述剩余空间,则将 任务存放到任务队列中;若没有所述剩余空间,则在所述线程池中创建设定 数量的扩展线程,并把任务队列中的待执行任务分别分配给所述扩展线程执 行;

保留线程调整模块,用于周期性统计周期内非任务操作的频次;根据本 周期内统计的非任务操作的频次,确定出下个周期的线程池中保留线程的数 量;将确定出的下个周期的线程池中保留线程的数量与当前线程池中保留线 程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得到下个 周期的数量调整后的保留线程。

较佳地,所述保留线程调整模块具体包括:

非任务操作频次统计单元,用于周期性统计周期内非任务操作的频次;

下周期保留线程数量确定单元,用于根据非任务操作频次统计单元确定 出的本周期的非任务操作的频次,依据设定规则,确定出下个周期的线程池 中保留线程的数量。

下周期保留线程调整单元,用于将下周期保留线程数量确定单元确定出 的下个周期的线程池中保留线程的数量与当前线程池中保留线程的数量进行 比较,根据比较结果调整当前线程池中的保留线程,得到下个周期的数量调 整后的保留线程。

本发明方案的方法和装置实现了在执行任务过程中自动调整线程池的保 留线程,和利用自动调整线程池的保留线程来执行数量变化的任务,降低线 程池工作过程中非任务操作的系统资源消耗,保证对任务的响应速度,还减 小占用的系统资源。

附图说明

图1为本发明实施例的调整线程池中保留线程的数量的方法的流程图;

图2a为本发明实施例的周期内任务数量波动图;

图2b为本发明实施例的调整线程池中保留线程的数量的装置的内部结构 框图;

图3为本发明实施例的利用周期性调整线程池中保留线程的数量来执行 任务的方法的流程图;

图4为本发明实施例的利用周期性调整线程池中保留线程的数量来执行 任务的装置的内部结构框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举 出优选实施例,对本发明进一步详细说明。然而,需要说明的是,说明书中 列出的许多细节仅仅是为了使读者对本发明的一个或多个方面有一个透彻的 理解,即便没有这些特定的细节也可以实现本发明的这些方面。

本申请使用的“模块”、“系统”等术语旨在包括与计算机相关的实体, 例如但不限于硬件、固件、软硬件组合、软件或者执行中的软件。例如,模 块可以是,但并不仅限于:处理器上运行的进程、处理器、对象、可执行程 序、执行的线程、程序和/或计算机。举例来说,计算设备上运行的应用程序 和此计算设备都可以是模块。一个或多个模块可以位于执行中的一个进程和/ 或线程内,一个模块也可以位于一台计算机上和/或分布于两台或更多台计算 机之间。

本发明的发明人,考虑到虽然任务数量的变化不可预测,但一段时间内, 任务数量发生较大变化会导致线程池工作过程中非任务操作频次发生较大变 化,因此,可以在执行任务过程中根据统计到的所述非任务操作频次自动调 整线程池的保留线程数量,用以降低线程池的非任务操作的系统资源消耗, 提高对任务的响应速度。其中,非任务操作包括任务队列操作和扩展线程操 作;任务队列操作包括任务入任务队列的操作,扩展线程操作包括创建扩展 线程和销毁扩展线程的操作。

另一方面,利用自动调整线程池中保留线程的方法来执行数量变化的任 务,降低了线程池的非任务操作的系统资源消耗,提高对任务的响应速度。

基于上述的分析,接下来说明本发明的技术方案的两个方面。其中一个 方面根据周期性统计周期内非任务操作频次,自动调整线程池的保留线程数 量的方法和装置;另一个方面是利用周期性自动调整保留线程的线程池来执 行数量变化的任务的方法和装置。其中,所述周期为预先设定的一段时间。 下面结合附图详细说明本发明的技术方案。

其中,根据周期性统计周期内非任务操作频次,自动调整线程池的保留 线程数量的方法的具体流程图如图1所示,具体包括以下步骤:

S101:初始化线程池。

具体的,采用线程池技术的软件启动,在当前线程池中创建线程池管理 器、任务接口、任务队列和确定数量的保留线程,并设定该线程池的任务队 列长度。例如,创建的保留线程数量为2,设定任务队列长度为50。

同时,线程池管理器开始监控和统计非任务操作频次,直到保留线程数 量为0。

S102:线程池管理器周期性统计周期内非任务操作的频次。

具体的,每个周期开始时,将本周期的非任务操作频次清0;在每个周期 内,线程池管理器将任务接口接受的任务首先分配给空闲的保留线程执行, 当任务数量从小变大时,空闲的保留线程逐渐减少,当空闲的保留线程数量 为0时,线程池管理器将待执行的任务依次加入任务队列(即任务队列操作); 当任务队列满后,线程池管理器执行创建扩展线程操作;当任务数量从大变 小时,所述扩展线程空闲,线程池管理执行销毁扩展线程操作;当任务数量 保持相对稳定时,非任务操作很少;线程池管理器对所述非任务操作频次进 行统计。

例如,在一个周期内,任务数量波动如图2a所示,横坐标为时间,从左 到右等间隔增加,纵坐标为任务数量,从下到上,等间隔增加;任务数量从 初始相对平稳在10,迅速波动变大相对平稳在120,之后又波动变小相对稳 定在40,该周期内统计的所述非任务操作频次为8。

S103:根据本周期统计的非任务操作频次,确定出下个周期的线程池中 保留线程的数量。

具体的,如何确定下个周期的线程池中保留线程的数量可以采用如下的 方法:例如,将步骤S102确定的本周期的非任务操作频次与若干个频次阈值 进行比较:若存在小于所述非任务操作频次的频次阈值,则确定出小于所述 非任务操作频次的各频次阈值中最大的频次阈值,将该最大的频次阈值对应 的保留线程建议数量作为下个周期的线程池中保留线程的数量;否则,将本 周期的非空闲的保留线程数量作为下个周期的线程池中保留线程的数量。

或者,将本周期分解成n个子周期,n为自然数,所述本周期的非任务操 作频次分解成n个子周期内分别统计的n个非任务操作子频次;将n个所述 非任务操作子频次分别与若干个频次阈值进行比较:若存在小于n个所述非 任务操作子频次的频次阈值,则确定出小于n个所述非任务操作子频次的各 频次阈值中最大的频次阈值,将该最大的频次阈值对应的保留线程建议数量 作为下个周期的线程池中保留线程的数量;否则,将本周期的非空闲的保留 线程数量作为下个周期的线程池中保留线程的数量。

其中,所述各频次阈值及其对应的保留线程建议数量为预先设定的自然 数。

S104:将确定出的下个周期的线程池中保留线程的数量与当前线程池中 保留线程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得 到下个周期的数量调整后的保留线程。

具体的,计算步骤S103确定出的下个周期的线程池中保留线程的数量减 去当前线程池的保留线程数量的差值:若计算出的差值大于0,则线程池管理 器在当前线程池中创建与所述差值相同个数的保留线程;若计算出的差值等 于0,则当前线程池的保留线程不变;若计算出的差值小于0,则线程池管理 器销毁当前线程池中与所述差值相同个数的空闲的保留线程;得到下个周期 的数量调整后的保留线程。

本发明实施例提供一种调整线程池中保留线程的数量的装置,内容结构 框图如图2b所示,包括:

非任务操作频次统计单元201,用于周期性统计周期内非任务操作的频 次。非任务操作频次统计单元201具体在每个周期开始时,将本周期的非任 务操作频次清0;在每个周期内,当当前线程池没有空闲的保留线程时,则统 计执行任务队列操作的频次;当任务队列满时,则统计执行创建扩展线程操 作的频次;当任务数量从大变小时,则统计执行销毁扩展线程操作的频次; 其中,任务队列操作、创建扩展线程操作和销毁扩展线程操作均属于非任务 操作。

下周期保留线程数量确定单元202,用于根据非任务操作频次统计单元 201确定出的本周期的非任务操作的频次,确定出下个周期的线程池中保留线 程的数量。下周期保留线程数量确定单元202具体可以采用如下方法确定出 下个周期的线程池中保留线程的数量:例如,将本周期分解成n个子周期,n 为自然数,所述本周期的非任务操作频次分解成n个子周期内分别统计的n 个非任务操作子频次;将n个非任务操作子频次分别与若干个频次阈值进行 比较:若存在小于n个非任务操作子频次的频次阈值,则确定出小于n个非 任务操作子频次的各频次阈值中最大的频次阈值,将该最大的频次阈值对应 的保留线程建议数量作为下个周期的线程池中保留线程的数量;否则,将本 周期的非空闲的保留线程数量作为下个周期的线程池中保留线程的数量。

其中,所述各频次阈值及其对应的保留线程建议数量为预先设定的自然 数。

下周期保留线程调整单元203,用于计算下周期保留线程数量确定单元 202确定出的下个周期的线程池中保留线程的数量减去当前线程池中保留线 程的数量的差值,若计算出的差值大于0,则在当前线程池中创建与所述差值 相同个数的保留线程;若计算出的差值等于0,则当前线程池的保留线程不变; 若计算出的差值小于0,则销毁当前线程池中与所述差值相同个数的空闲的保 留线程。

此外,利用周期性自动调整保留线程的线程池来执行数量变化的任务的 方法的具体流程图如图3所示,具体包括以下步骤:

S301:初始化线程池。

具体的,采用线程池技术的软件启动,在当前线程池中创建线程池管理 器、任务接口、任务队列和确定数量的保留线程,并设定任务队列长度。

S302:线程池管理器通过任务接口接受到任务后,判断当前线程池中是 否有空闲的保留线程;若有,则执行步骤S303;否则,执行步骤S304。

S303:线程池管理器把任务分配给其中一个空闲的保留线程执行。

当任务数量较小且相对稳定时,利用自动调整后的保留线程执行任务, 无需任务队列操作和创建扩展线程操作及销毁扩展线程操作,节省了非任务 操作所消耗的系统资源,保证对任务的响应速度;也无需冗余的保留线程, 减少了系统资源的占用。

S304:线程池管理器判断任务队列是否有剩余空间;若有所述剩余空间, 则执行步骤S305;否则,执行步骤S306。

S305:线程池管理器将任务存放到任务队列中。

当任务数量从大变小时,利用自动调整后的保留线程执行任务,无需创 建和销毁扩展线程操作,只需任务队列操作,节省了非任务操作所消耗的系 统资源,保证对任务的响应速度。

S306:线程池管理器在当前线程池中创建设定数量的扩展线程,并把任 务队列中的待执行任务分配给扩展线程执行。

当任务数量从小变大或者任务数量较大且相对稳定时,利用自动调整后 的保留线程执行任务,减小创建和销毁扩展线程操作的几率,保证对任务的 相应速度。

此外,线程池管理器监测扩展线程状态:若监测到扩展线程执行任务完 毕,则将该扩展线程标识为空闲,将空闲了一段时间的扩展线程销毁;未销 毁的扩展线程继续执行任务,直到扩展线程数量为0,同时保留线程持续执行 任务。

线程池管理器监测任务队列状态,若任务队列不为空:则判断线程池管 理器监测到扩展线程数量是否为0:若扩展线程数量为0,则根据先入先出原 则把待执行任务从任务队列分配给保留线程执行;否则,把待执行任务从任 务队列分配给扩展线程执行;直到任务队列为空。

线程池管理器监测保留线程状态:若监测到保留线程执行任务完毕,则 将该保留线程标识为空闲;即使保留线程空闲了一段时间也不销毁,非空闲 的保留线程继续执行任务,直到非空闲的保留线程数量为0。

此外,本发明实施例还提供了一种利用周期性自动调整保留线程的线程 池来执行数量变化的任务的装置,内部结构框图如图4所示,具体包括:任 务管理模块401和保留线程调整模块402;

所述任务管理模块401,用于接受到任务后,判断当前线程池中是否有空 闲的保留线程;若有,则把该任务分配给其中一个空闲的保留线程执行;否 则:判断当前线程池的任务队列是否有剩余空间;若有所述剩余空间,则将 任务存放到任务队列中;若没有所述剩余空间,则在所述线程池中创建设定 数量的扩展线程,并把任务队列中的待执行任务分别分配给所述扩展线程执 行;

其中,所述线程池中的保留线程的数量是根据保留线程调整模块402调 整的:保留线程调整模块402用于周期性统计周期内非任务操作的频次;根 据本周期内统计的非任务操作的频次,确定出下个周期的线程池中保留线程 的数量;将确定出的下个周期的线程池中保留线程的数量与当前线程池中保 留线程的数量进行比较,根据比较结果调整当前线程池中的保留线程,得到 下个周期的数量调整后的保留线程。

其中,所述保留线程调整模块402,包括:上述的非任务操作频次统计单 元201、下周期保留线程数量确定单元202和下周期保留线程调整单元203。

上述的任务管理模块401和保留线程调整模块402均可设置于线程池管 理器中,或者,任务管理模块401设置于线程池管理器中,保留线程调整模 块402设置于线程池管理器外。

本发明方案的方法和装置实现了在执行任务过程中自动调整线程池的保 留线程,和利用自动调整线程池的保留线程来执行数量变化的任务,降低线 程池工作过程中非任务操作的系统资源消耗,保证对任务的响应速度,还减 小占用的系统资源。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普 通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润 饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号