本公开涉及计算机应用技术领域,特别涉及一种基于线程池的任务处理方法及装置。
背景技术:
随着计算机应用技术的高速发展,计算机设备大多采用线程池进行任务处理,即通过线程池中多线程并行处理的方式充分利用计算机设备资源,提高任务处理效率。
然而,每个线程池的任务处理能力有限,当一任务提交至线程池后,由于线程池的处理能力超限等原因,该任务将被线程池拒绝,进而导致该任务被抛弃,得不到相应的处理,从而降低计算机设备的任务处理能力。
图1是根据一示例性实施例示出的java系统自带线程池进行任务处理的结构示意图。如图1所示,当向线程池提交任务时,若线程池中的线程数量小于corepoolsize(线程池的核心大小),线程池就会创建新的线程对任务进行处理;若线程池中的线程数量不小于corepoolsize但小于maxpoolsize(最大线程数),在任务缓存队列未满时,就会将任务置入任务缓存队列中,在任务缓存队列已满时,就会创建新的线程对任务进行处理;但若线程池中的线程数量不小于maxpoolsize,就会拒绝该任务,使该任务得不到处理,从而降低计算机设备的任务处理能力。
因此,目前计算机设备基于线程池进行任务处理时,无法在任务被一个线程池拒绝后对该任务进行处理,导致任务处理能力较低。
技术实现要素:
为了解决相关技术中基于线程池的任务处理能力较低的技术问题,本公开提供了一种基于线程池的任务处理方法及装置。
一种基于线程池的任务处理方法,包括:
接收线程池的任务拒绝指令;
根据所述任务拒绝指令获得被所述线程池拒绝的任务;
通过所述线程池的子线程池处理所述任务。
一种基于线程池的任务处理装置,包括:
拒绝接收模块,用于接收线程池的任务拒绝指令;
任务获取模块,用于根据所述任务拒绝指令获得被所述线程池拒绝的任务;
任务处理模块,用于通过所述线程池的子线程池处理所述任务。
本公开的实施例提供的技术方案可以包括以下有益效果:
在基于线程池进行任务处理时,通过接收线程池的任务拒绝指令,根据任务拒绝指令获得被线程池拒绝的任务,进而采用线程池的子线程池处理该任务,避免任务因被线程池拒绝而得不到处理,从而采用该线程池和该线程池的子线程池并行对任务进行处理,大大提高了计算机设备的任务处理能力。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并于说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的java系统自带线程池进行任务处理的结构示意图;
图2是根据一示例性实施例示出的一种基于线程池的任务处理方法流程图;
图3是根据图2对应实施例示出的另一种基于线程池的任务处理方法流程图;
图4是根据图2对应实施例示出的另一种基于线程池的任务处理方法流程图;
图5是根据图2对应实施例示出的另一种基于线程池的任务处理方法流程图;
图6是图2对应实施例的基于线程池的任务处理方法中步骤s150的一种具体实现流程图;
图7是根据一示例性实施例示出的一种基于线程池的任务处理的具体应用场景示意图;
图8是根据一示例性实施例示出的一种基于线程池的任务处理装置的框图;
图9是根据图8对应实施例示出的另一种基于线程池的任务处理装置的框图;
图10是根据图8对应实施例示出的另一种基于线程池的任务处理装置的框图;
图11是根据图8对应实施例示出的另一种基于线程池的任务处理装置的框图;
图12是根据图8对应实施例示出的基于线程池的任务处理装置中任务处理模块150的框图;
图13是根据一示例性实施例示出的一种实施环境中计算机设备的示意图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在一个实施例中,本公开涉及的实施环境包括:计算机设备和装设在计算机设备上的任务处理模组。其中,计算机设备具有独立操作系统,独立运行空间,可以安装软件以及第三方服务商提供的软件,例如,计算机设备可以是各种智能系统处理设备等。任务处理模组是能够基于线程池对任务进行处理的硬件模块。
图2是根据一示例性实施例示出的一种基于线程池的任务处理方法流程图。如图2所示,该基于线程池的任务处理方法可以包括以下步骤。
在步骤s110中,接收线程池的任务拒绝指令。
线程池是一种多线程处理形式,处理过程中将任务添加到任务缓存队列,然后在创建线程后自动执行这些任务。任务执行完毕后,将自动对该线程进行回收。
线程也被称为轻量级进程(lightweightprocess,lwp),是程序执行流的最小单元。
任务拒绝指令是线程池针对拒绝接受的任务而发出的指令。
可以理解的是,计算机设备中每个线程池的任务处理能力有限。当线程池的任务量超限时,就会拒绝接受新的任务,并针对该任务发出任务拒绝指令。
因而,在线程池针对任务发出任务拒绝指令后,计算机设备就会接收到任务拒绝指令。
在一个具体的示例性实施例中,线程池a的最大线程数为maxpoolsize。当线程池a中的线程数量达到maxpoolsize,并且任务缓存队列已满,若此时仍向线程池a提交新的任务,线程池a就会拒绝接受该任务,并针对该任务发出任务拒绝指令。
在步骤s130中,根据任务拒绝指令获得被线程池拒绝的任务。
可以理解的是,计算机设备中每个任务均有其对应的标识信息。
需要说明的是,任务拒绝指令是线程池针对某个任务的拒绝而发出的,任务拒绝指令中包含有该任务的标识信息,例如任务序列号等。
因而根据任务拒绝指令中的标识信息可以查找到被拒绝的任务。
在步骤s150中,通过线程池的子线程池处理任务。
子线程池是计算机设备中的归属于某个线程池的从属线程池。
子线程池中保存了对其归属的线程池的引用,共享其归属的线程池中的任务缓存列表,从而可以获取其归属的线程池的任务缓存队列,进而协助其归属的线程池进行任务处理。
例如,计算机设备存在有线程池a和子线程池b,子线程池b是线程池a的子线程池,子线程池b可以获取线程池a的任务缓存列表。
子线程池接收任务后,通过创建新的线程执行被拒绝的任务,从而使该任务得到处理。
利用如上所述的方法,在任务被线程池拒绝后,通过该线程池的子线程池对该任务进行处理,避免出现任务得不到处理的现象,大大提高了基于线程池进行任务处理的能力。
图3是根据一示例性实施例示出的一种基于线程池的任务处理方法流程图。如图3所示,图2中对应实施例示出的步骤s150之前,该基于线程池的任务处理方法还可以包括以下步骤。
在步骤s210中,判断线程池是否存在子线程池,若为否(n),则执行步骤s230,若为是(y),则执行步骤s150。
在获得被线程池拒绝的任务后,通过判断是否存在有线程池从属于该线程池,进而确定该线程池是否存在子线程池。
判断是否存在有线程池从属于该线程池,即判断该线程池是否存在子线程池可以通过判断该线程池是否向其他线程池共享任务缓存队列。
需要说明的是,线程池向其他线程池共享任务缓存队列时,将在该线程池中添加任务共享信息。
因而,通过在各线程池中查找任务共享信息,查找到添加有任务共享信息的线程池后,根据任务共享信息确定共享该线程池中任务缓存队列的子线程池。
当拒绝任务的线程池不存在子线程池时,则为该线程池创建子线程池;当拒绝任务的线程池存在有子线程池时,则通过子线程池处理任务。
在步骤s230中,为线程池创建子线程池。
根据线程池的任务缓存列表,为该线程池建立一个从属线程池,即子线程池,并设置该线程池的任务缓存列表向子线程池共享。
创建子线程池时,在线程池中添加任务共享信息,从而子线程池能够共享该线程池中的任务缓存队列,实现对该线程池中的任务进行监测。
在一个具体的示例性实施例中,当任务处理能力超限的线程池接收任务后,将针对该任务发送任务拒绝指令。根据该任务拒绝指令,在该线程池不存在子线程池时申请为该线程池创建子线程池,进而通过该子线程池的线程执行被线程池拒绝的任务。
通过如上所述的方法,线程池对任务拒绝后,当该线程池不存在有子线程池时,为该线程池创建子线程池,进而通过子线程池处理被该线程池拒绝的任务,避免出现任务得不到处理的现象,大大提高了基于线程池进行任务处理的能力。
图4是根据一示例性实施例示出的一种基于线程池的任务处理方法流程图。如图4所示,图2中对应实施例示出的步骤s150之后还可以包括以下步骤。
在步骤s310中,判断子线程池的任务缓存队列是否为空,若为是(y),则执行步骤s330,若为否(n),则执行步骤s311。
可以理解的是,子线程池是用于协助其归属的线程池进行任务处理。
当子线程池的任务缓存队列为空时,表明子线程池处理的任务已执行完毕,子线程池此时处于空闲状态。为进一步协助其归属的线程池进行任务处理,从其归属的线程池中提取出任务,从而减少其归属的线程池的任务处理量,提高计算机设备基于线程池进行任务处理的能力。
当子线程池的任务缓存队列不为空时,子线程池则继续处理其自身任务缓存队列中的任务。
在一个具体的示例性实施例中,采用子线程池进行任务处理时,根据子线程池自身任务缓存队列中各任务的排列顺序,依次从任务缓存队列中提取任务,再通过子线程池的线程进行任务执行;在子线程池自身任务缓存队列中的任务执行完毕后,从子线程池归属的线程池的任务缓存队列中提取任务,再通过子线程池的线程执行该任务,直至子线程及该子线程归属的线程池各自的任务缓存队列为空。
在步骤s330中,从线程池的任务缓存队列中提取任务。
在步骤s311中,继续处理任务缓存队列中的任务。
在步骤s350中,采用子线程池的线程执行任务。
利用如上所述的方法,通过子线程池协助其归属的线程池进行任务处理,在子线程池的任务缓存队列为空时,通过从其归属的线程池中提取出任务,再采用子线程池中的线程执行该任务,从而通过多个线程池并行进行任务处理,加快了任务处理的速度,提高了线程池的任务处理能力。
图5是根据一示例性实施例示出的另一种基于线程池的任务处理方法流程图。如图5所示,图2中对应实施例示出的步骤s150之后还可以包括以下步骤。
在步骤s410中,分别对线程池和线程池的子线程池进行任务缓存队列检测。
任务缓存队列检测是对任务缓存队列中是否还存在未执行的任务进行检测。
在步骤s430中,在线程池和线程池的子线程池中任务缓存队列均为空时,销毁线程池的子线程池。
可以理解的是,当线程池和该线程池的子线程池中任务缓存队列均为空时,表明线程池和该线程池的子线程池均已处理任务完毕,此时,线程池和该线程池的子线程池均处于空闲状态,并无任务执行。
因此,若线程池和该线程池的子线程池中任务缓存队列均为空时,仍保留子线程池,将造成系统资源浪费。此时,即使有新的任务需要处理,该线程池也能相应执行,销毁子线程池也不会影响任务处理能力。但通过销毁该线程池的子线程池,却能够避免系统资源的浪费。
利用如上所述的方法,在线程池和该线程池的子线程池中任务缓存队列均为空时,销毁该线程池的子线程池,从而在不影响任务处理时避免了系统资源的浪费。
图6是根据一示例性实施例示出的对图2中步骤s150的细节的描述。该步骤s150可以包括以下步骤。
在步骤s151中,将任务置入子线程池的任务缓存队列中。
需要说明的是,线程池进行任务处理时,先将任务置入线程池的任务缓存队列,当线程池的线程未达到线程容量时,通过创建新的线程执行任务缓存队列中的任务。
子线程池接收新的任务后,将该任务置入其自身的任务缓存队列中,以供子线程池创建线程后执行。
在步骤s153中,判断子线程池的线程数量是否达到预设线程容量,若为否(n),则执行步骤s155,若为是(y),则暂不对子线程池的任务缓存队列中的任务进行处理。
需要说明的是,线程池均预设有线程容量。通过对线程池中的线程数量进行控制,避免因线程池中过多的线程占用系统资源而造成系统崩溃。
当子线程池中的线程数量未达到预设线程容量时,通过在子线程池中创建新的线程对任务缓存队列中的任务进行处理;当子线程池的线程数量达到预设线程容量时,需等待正在执行的任务执行完毕后,再对任务缓存队列中的任务进行处理。
在步骤s155中,通过子线程池的线程执行任务缓存队列中的任务。
利用如上所述的方法,在子线程池的线程数量未达到预设线程容量时,采用子线程池的线程进行执行任务缓存队列中的任务,避免在子线程池的线程数量达到预设线程容量后仍创建线程执行任务,导致过多占用系统资源而造成系统崩溃。
下面结合一个具体的应用场景来详细阐述如上的基于线程池的任务处理方法。基于线程池的任务处理方法运行于一计算机设备中,具体的,如图7所示。
向父线程池提交任务。
判断父线程池是否达到最大处理能力。若父线程池未达到最大处理能力,则通过父线程池对该任务进行处理;若父线程池达到最大处理能力,则父线程池针对该任务发出任务拒绝指令,根据任务拒绝指令查找被父线程池拒绝的任务。
判断父线程池是否存在子线程池。若父线程池存在子线程池,则将该任务置入子线程池的任务缓存队列中;若父线程池不存在子线程池,则为父线程池创建子线程池,并将该任务置入子线程池的任务缓存队列中。
通过子线程池的线程执行任务缓存队列中的任务。
判断子线程池的任务缓存队列是否为空。当子线程池的任务缓存队列为空时,判断父线程池的任务缓存队列是否为空。当父线程池的任务缓存队列是否为空,从父线程池的任务缓存队列中提取任务,并将任务置入子线程池的任务缓存队列中。
当父线程池和父线程池的子线程池中任务缓存队列均为空时,销毁所述父线程池的子线程池。
下述为本公开装置实施例,可以用于执行本上述基于线程池的任务处理方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开基于线程池的任务处理方法实施例。
图8是根据一示例性实施例示出的一种基于线程池的任务处理装置的框图,该装置包括但不限于:拒绝接收模块110、任务获取模块130及任务处理模块150。
拒绝接收模块110,用于接收线程池的任务拒绝指令;
任务获取模块130,用于根据所述任务拒绝指令获得被所述线程池拒绝的任务;
任务处理模块150,用于通过所述线程池的子线程池处理所述任务。
上述装置中各个模块的功能和作用的实现过程具体详见上述基于线程池的任务处理方法中对应步骤的实现过程,在此不再赘述。
可选的,如图9所示,图8中所示的基于线程池的任务处理装置还包括但不限于:子线程池判断模块210和子线程池创建模块230。
子线程池判断模块210,用于判断所述线程池是否存在子线程池;
子线程池创建模块230,用于当所述线程池不存在子线程池时,为所述线程池创建子线程池。
可选的,如图10所示,图8中所示的基于线程池的任务处理装置还包括但不限于:任务缓存队列判断模块310、任务提取模块330和任务执行模块350。
任务缓存队列判断模块310,用于判断所述子线程池的任务缓存队列是否为空;
任务提取模块330,用于当所述子线程池的任务缓存队列为空时,从所述线程池的任务缓存队列中提取任务;
任务执行模块350,用于采用所述子线程池的线程执行所述任务。
可选的,如图11所示,图8中所示的基于线程池的任务处理装置还包括但不限于:任务缓存队列检测模块410和子线程池销毁模块430。
任务缓存队列检测模块410,用于分别对所述线程池和所述线程池的子线程池进行任务缓存队列检测;
子线程池销毁模块430,用于在所述线程池和所述线程池的子线程池中任务缓存队列均为空时,销毁所述线程池的子线程池。
可选的,如图12所示,图8中的任务处理模块150包括但不限于:任务放置单元151、线程数量判断单元153和任务执行单元155。
任务放置单元151,用于将所述任务置入所述子线程池的任务缓存队列中;
线程数量判断单元153,用于判断所述子线程池的线程数量是否达到预设线程容量;
任务执行单元155,用于当所述子线程池的线程数量未达到预设线程容量时,通过所述子线程池创建新的线程执行所述任务缓存队列中的所述任务。
图13是根据一示例性实施例示出的一种终端100的框图。终端100可以应用于上述实施环境中的计算机设备。
参考图13,终端100可以包括以下一个或者多个组件:处理组件101,存储器102,电源组件103,多媒体组件104,音频组件105,传感器组件107以及通信组件108。其中,上述组件并不全是必须的,终端100可以根据自身功能需求增加其他组件或减少某些组件,本实施例不作限定。
处理组件101通常控制终端100的整体操作,诸如与显示,电话呼叫,数据通信,相机操作以及记录操作相关联的操作等。处理组件101可以包括一个或多个处理器109来执行指令,以完成上述操作的全部或部分步骤。此外,处理组件101可以包括一个或多个模块,便于处理组件101和其他组件之间的交互。例如,处理组件101可以包括多媒体模块,以方便多媒体组件104和处理组件101之间的交互。
存储器102被配置为存储各种类型的数据以支持在终端100的操作。这些数据的示例包括用于在终端100上操作的任何应用程序或方法的指令。存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如sram(staticrandomaccessmemory,静态随机存取存储器),eeprom(electricallyerasableprogrammableread-onlymemory,电可擦除可编程只读存储器),eprom(erasableprogrammablereadonlymemory,可擦除可编程只读存储器),prom(programmableread-onlymemory,可编程只读存储器),rom(read-onlymemory,只读存储器),磁存储器,快闪存储器,磁盘或光盘。存储器102中还存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器109执行,以完成图2、图3、图4、图5和图6任一所示方法中的全部或者部分步骤。
电源组件103为终端100的各种组件提供电力。电源组件103可以包括电源管理系统,一个或多个电源,及其他与为终端100生成、管理和分配电力相关联的组件。
多媒体组件104包括在所述终端100和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括lcd(liquidcrystaldisplay,液晶显示器)和tp(touchpanel,触摸面板)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
音频组件105被配置为输出和/或输入音频信号。例如,音频组件105包括一个麦克风,当终端100处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或经由通信组件108发送。在一些实施例中,音频组件105还包括一个扬声器,用于输出音频信号。
传感器组件107包括一个或多个传感器,用于为终端100提供各个方面的状态评估。例如,传感器组件107可以检测到终端100的打开/关闭状态,组件的相对定位,传感器组件107还可以检测终端100或终端100一个组件的位置改变以及终端100的温度变化。在一些实施例中,该传感器组件107还可以包括磁传感器,压力传感器或温度传感器。
通信组件108被配置为便于终端100和其他设备之间有线或无线方式的通信。终端100可以接入基于通信标准的无线网络,如wifi(wireless-fidelity,无线网络),2g或3g,或它们的组合。在一个示例性实施例中,通信组件108经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件108还包括nfc(nearfieldcommunication,近场通信)模块,以促进短程通信。例如,在nfc模块可基于rfid(radiofrequencyidentification,射频识别)技术,irda(infrareddataassociation,红外数据协会)技术,uwb(ultra-wideband,超宽带)技术,bt(bluetooth,蓝牙)技术和其他技术来实现。
在示例性实施例中,终端100可以被一个或多个asic(applicationspecificintegratedcircuit,应用专用集成电路)、dsp(digitalsignalprocessing,数字信号处理器)、pld(programmablelogicdevice,可编程逻辑器件)、fpga(field-programmablegatearray,现场可编程门阵列)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述基于线程池的任务处理方法。
该实施例中的终端的处理器执行操作的具体方式已经在有关基于线程池的任务处理方法的实施例中执行了详细描述,此处将不再做详细阐述说明。
在示例性实施例中,还提供了一种存储介质,该存储介质为计算机可读存储介质,例如可以为包括指令的临时性和非临时性计算机可读存储介质。该存储介质例如包括指令的存储器102,上述指令可由终端100的处理器109执行以完成上述基于线程池的任务处理方法。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。