一种基于线程池的任务处理方法及装置与流程

文档序号:18142287发布日期:2019-07-10 11:12阅读:148来源:国知局
一种基于线程池的任务处理方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种基于线程池的任务处理方法及装置。



背景技术:

目前大部分的任务都是使用线程池的线程来执行,并且一般在配置好线程池之后,很难对线程池的大小进行灵活的调整以及监控。当某个任务需要线程来执行时,一旦线程池中没有空闲线程,那么该任务就只能等待线程池中正在执行任务的线程被释放,再利用被释放后的线程执行该任务,这将导致任务的等待时间长、处理效率低。



技术实现要素:

本申请实施例提供一种基于线程池的任务处理方法及装置,可以减少任务的等待时长,提高任务的处理效率。

第一方面,本申请实施例提供了一种基于线程池的任务处理方法,该方法包括:

获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,该目标线程池中包括至少一个线程;

若检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程,则获取该目标线程池的第一配置参数,该第一配置参数用于指示线程池是否允许借用其他线程池中的线程;

若该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,则向第一线程池发送线程借用请求,该线程借用请求用于请求借用未被占用的空闲线程,该第一线程池为该目标线程池之外的一个或者多个线程池;

接收该第一线程池针对该线程借用请求返回的线程借用响应,根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,并基于该执行线程池中的任一空闲线程处理该目标任务。

结合第一方面,在一种可能的实施方式中,若该第一线程池为该目标线程池之外的一个线程池;则根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,包括:若该第一线程池返回的线程借用响应为确认借用,则将该第一线程池确定为该目标任务的执行线程池。其中,该确认借用为该第一线程池的第二配置参数指示该第一线程池中的线程允许被其他线程池借用且存在空闲线程时返回的线程借用响应,该第二配置参数用于指示线程池中的线程是否允许被其他线程池借用。

结合第一方面,在一种可能的实施方式中,若该第一线程池为该目标线程池之外的多个线程池;则根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,包括:

若该第一线程池的各个线程池返回的线程借用响应中存在确认借用,则统计该第一线程池的各个线程池返回的该线程借用响应为确认借用的线程池数量;若该线程池数量大于1,则从返回线程借用响应为确认借用的线程池中任选一个线程池作为该目标任务的执行线程池。其中,该确认借用为该第一线程池中存在空闲线程且第二配置参数指示线程池中的线程允许被其他线程池借用的线程池返回的线程借用响应。

结合第一方面,在一种可能的实施方式中,该方法还包括:若该第一线程池返回的线程借用响应均不为确认借用,则将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程;当该目标线程池中存在空闲线程时,基于该目标线程池中的空闲线程处理该目标任务。

结合第一方面,在一种可能的实施方式中,该第一线程池中包括至少一个第二线程池,该第二线程池的第二配置参数指示该第二线程池中的线程允许被其他线程池借用。向第一线程池发送线程借用请求,包括:向第一线程池中的至少一个第二线程池发送线程借用请求。接收该第一线程池针对该线程借用请求返回的线程借用响应,根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,包括:接收该第一线程池的至少一个第二线程池针对该线程借用请求返回的线程借用响应;根据该线程借用响应从该第一线程池的至少一个第二线程池中确定出该目标任务的执行线程池。

结合第一方面,在一种可能的实施方式中,在获取该目标线程池的第一配置参数之后,该方法还包括:若该目标线程池的第一配置参数指示该目标线程池不允许借用其他线程池中的线程,则将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程;当该目标线程池中存在空闲线程时,则基于该目标线程池中的空闲线程处理该目标任务。

结合第一方面,在一种可能的实施方式中,在获取该目标任务的任务类型对应的目标线程池之后,该方法还包括:若检测到该目标线程池的至少一个线程中存在未被占用的空闲线程,则基于该目标线程池中的任一空闲线程处理该目标任务。

第二方面,本申请实施例提供了一种任务处理装置,该任务处理装置包括:

第一获取模块,用于获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,该目标线程池中包括至少一个线程;

第二获取模块,用于在检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,该第一配置参数用于指示线程池是否允许借用其他线程池中的线程;

发送模块,用于当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程时,向第一线程池发送线程借用请求,该线程借用请求用于请求借用未被占用的空闲线程,该第一线程池为该目标线程池之外的一个或者多个线程池;

接收模块,用于接收该第一线程池针对该线程借用请求返回的线程借用响应;

确定模块,用于根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池;

处理模块,用于基于该执行线程池中的任一空闲线程处理该目标任务。

结合第二方面,在一种可能的实施方式中,若该第一线程池为该目标线程池之外的一个线程池。上述确定模块具体用于:当该第一线程池返回的线程借用响应为确认借用时,将该第一线程池确定为该目标任务的执行线程池。其中,该确认借用为该第一线程池的第二配置参数指示该第一线程池中的线程允许被其他线程池借用且存在空闲线程时返回的线程借用响应,该第二配置参数用于指示线程池中的线程是否允许被其他线程池借用。

结合第二方面,在一种可能的实施方式中,若该第一线程池为该目标线程池之外的多个线程池。上述确定模块具体用于:当该第一线程池的各个线程池返回的线程借用响应中存在确认借用时,统计该第一线程池的各个线程池返回的该线程借用响应为确认借用的线程池数量;当该线程池数量大于1时,从返回线程借用响应为确认借用的线程池中任选一个线程池作为该目标任务的执行线程池。其中,该确认借用为该第一线程池中存在空闲线程且第二配置参数指示线程池中的线程允许被其他线程池借用的线程池返回的线程借用响应。

结合第二方面,在一种可能的实施方式中,该装置还包括:存储模块,用于当该第一线程池返回的线程借用响应均不为确认借用时,将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程;上述处理模块,还用于当该目标线程池中存在空闲线程时,基于该目标线程池中的空闲线程处理该目标任务。

结合第二方面,在一种可能的实施方式中,该第一线程池中包括至少一个第二线程池,该第二线程池的第二配置参数指示该第二线程池中的线程允许被其他线程池借用。上述发送模块,具体用于:当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程时,向第一线程池中的至少一个第二线程池发送线程借用请求。上述接收模块,具体用于:接收该第一线程池的至少一个第二线程池针对该线程借用请求返回的线程借用响应。上述确定模块,具体用于:根据该线程借用响应从该第一线程池的至少一个第二线程池中确定出该目标任务的执行线程池。

结合第二方面,在一种可能的实施方式中,上述存储模块,还用于当该目标线程池的第一配置参数指示该目标线程池不允许借用其他线程池中的线程时,将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程。上述处理模块,还用于当该目标线程池中存在空闲线程时,基于该目标线程池中的空闲线程处理该目标任务。

结合第二方面,在一种可能的实施方式中,上述处理模块,还用于当检测到该目标线程池的至少一个线程中存在未被占用的空闲线程时,基于该目标线程池中的任一空闲线程处理该目标任务。

第三方面,本申请实施例提供了一种终端,包括处理器、输入设备、输出设备和存储器,该处理器、输入设备、输出设备和存储器相互连接,其中,该存储器用于存储支持终端执行上述方法的计算机程序,该计算机程序包括程序指令,该处理器被配置用于调用该程序指令,执行上述第一方面的基于线程池的任务处理方法。

第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行上述第一方面的基于线程池的任务处理方法。

本申请实施例通过获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,当检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,向第一线程池发送线程借用请求,该第一线程池为该目标线程池之外的一个或者多个线程池,接收该第一线程池针对该线程借用请求返回的线程借用响应,根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,并基于该执行线程池中的任一空闲线程处理该目标任务。可以减少任务的等待时长,提高任务的处理效率。

附图说明

为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的基于线程池的任务处理方法的一示意流程图;

图2是本申请实施例提供的线程池数据库的一种示意图;

图3是本申请实施例提供的基于线程池的任务处理方法的另一示意流程图;

图4是本申请实施例提供的任务处理装置的一示意性框图;

图5是本申请实施例提供的终端的一示意性框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应当理解,本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

还应当理解,在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置展示该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

本申请实施例中的每个线程池中都包括至少一个线程,多个任务可共享线程池里面的线程,线程池中的多个线程可以并发执行。一个线程一次可处理一个任务,当任务处理完毕后会自动释放线程,以便于该线程处理下一个任务。

下面将结合图1至图5,对本申请实施例提供的基于线程池的任务处理方法及装置进行说明。

参见图1,是本申请实施例提供的基于线程池的任务处理方法的一示意流程图。如图1所示,该基于线程池的任务处理方法可包括步骤:

s101,终端获取目标任务的任务类型,并获取目标任务的任务类型对应的目标线程池。

在一些可行的实施方式中,上述目标任务可以为任务系统提交的任一任务。终端可以接收任务系统提交的目标任务,并可以检测该目标任务中携带的任务类型标识。终端可以获取该目标任务的任务类型标识对应的目标线程池。该目标城池中可以包括一个或多个线程。其中,终端中可以预先存储任务类型与线程池的对应关系,同一线程池中的线程可以用于处理同任务类型的任务。例如,任务类型标识“type1”表示第一任务类型,“type1”对应的线程池为线程池a,说明线程池a中的线程用于处理第一任务类型的任务;任务类型标识“type2”表示第二任务类型,“type2”对应的线程池为线程池b,说明线程池b中的线程用于执行第二任务类型的任务;任务类型标识“type3”表示第三任务类型,“type3”对应的线程池为线程池c,说明线程池c中的线程用于执行第三任务类型的任务,等等。

s102,若检测到目标线程池的至少一个线程中不存在未被占用的空闲线程,则终端获取目标线程池的第一配置参数。

在一些可行的实施方式中,终端可以检测上述目标线程池的至少一个线程中是否存在未被任务占用的空闲线程。当检测到该目标线程池中不存在空闲线程时,说明该目标线程池中的线程全部被占用(即正在处理任务),则终端可以从预设的线程池数据库中获取该目标线程池的第一配置参数。该第一配置参数可以用于指示线程池是否允许借用其他线程池中的线程,即是否可借用本线程池之外的线程。其中,预设的线程池数据库中可以用于存储与线程池相关的信息,如任务类型与线程池的对应关系,线程池的配置参数等等。

如图2所示,是本申请实施例提供的线程池数据库的一种示意图。其中,“第一任务类型”可用于表示不存在高峰和低谷且对时效性有一定要求的业务中的任务;“第二任务类型”可用于表示存在高峰且对时效性有一定要求的业务中的任务;“第三任务类型”可用于表示对时效性要求不高的业务中的任务;“第四任务类型”可用于表示对时效性要求较高的业务中的任务。一个业务中可包括一个或多个任务。第一配置参数中的“是或1”用于指示该线程池允许借用其他线程池中的线程,第一配置参数中的“否或0”用于指示该线程池不允许借用其他线程池中的线程。第二配置参数中的“是或1”用于指示该线程池中的线程允许被其他线程池借用,第二配置参数中的“否或0”用于指示该线程池中的线程不允许被其他线程池借用。

s103,若目标线程池的第一配置参数指示目标线程池允许借用其他线程池中的线程,则终端向第一线程池发送线程借用请求。

在一些可行的实施方式中,终端在获取到上述目标线程池的第一配置参数之后,可以检测该目标线程池的第一配置参数为是或否。当检测到该目标线程池的第一配置参数为是时,说明该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,则终端可以从线程池数据库中获取第一线程池,并可以向第一线程池发送线程借用请求。该第一线程池在接收到该线程借用请求之后,可以根据该第一线程池的第二配置参数和/或是否存在空闲线程返回线程借用响应。其中,该线程借用请求可以用于向该第一线程池请求借用未被占用的空闲线程,该第一线程池可以为线程池数据库中除该目标线程池之外的一个或多个线程池。第二配置参数可以用于指示线程池中的线程是否允许被其他线程池借用,即本线程池中的线程是否可被其他线程池借用。

例如,以第一线程池为目标线程池之外的多个线程池为例。假设目标线程池为图2中的线程池d,线程池d的第一配置参数为是,说明线程池d允许借用其他线程池中的线程。终端通过线程池d分别向线程池数据库中的线程池a、线程池b以及线程池c发送线程借用请求。在线程池a、b以及c接收到线程借用请求之后,分别检测线程池a、b、c的第二配置参数。因为线程池a的第二配置参数为否,说明线程池a中的线程不允许被其他线程池借用,则线程池a针对接收到的线程借用请求向目标线程池(线程池d)发送拒绝借用的线程借用响应。终端分别检测线程池b、c中是否存在空闲线程。假设线程池b中不存在空闲线程,则线程池b针对接收到的线程借用请求向线程池d发送拒绝借用的线程借用响应;线程池c中存在空闲线程,则线程池c针对接收到的线程借用请求向线程池d发送确认借用的线程借用响应。

s104,终端接收第一线程池针对线程借用请求返回的线程借用响应,根据线程借用响应从第一线程池中确定出目标任务的执行线程池,并基于执行线程池中的任一空闲线程处理目标任务。

在一些可行的实施方式中,终端可以接收上述第一线程池针对上述线程借用请求返回的线程借用响应。若上述第一线程池为上述目标线程池之外的一个线程池,终端可以检测该第一线程池返回的线程借用响应是否为确认借用。当该第一线程池返回的线程借用响应为确认借用时,说明该第一线程池中的线程允许被其他线程池借用且存在空闲线程,则终端可以将该第一线程池确定为上述目标任务的执行线程池,并可以基于该执行线程池中的任一空闲线程处理该目标任务。当该第一线程池返回的线程借用响应为拒绝借用时,说明该第一线程池中的线程不允许被其他线程池借用或不存在空闲线程,则终端可以将上述目标任务存储至任务缓存空间以等待上述目标线程池中的空闲线程。终端可以定时检测该目标线程池中是否存在空闲线程,当该目标线程池中存在空闲线程时,可以基于该目标线程池中的空闲线程处理该目标任务。本申请实施例在目标线程池中的线程全部被占用时,向其他线程池借用未被占用的空闲线程来处理目标任务,可以灵活调整处理任务的线程,减少任务的等待时长,提高任务的处理效率。

在一些可行的实施方式中,若上述第一线程池为上述目标线程池之外的多个线程池,终端可以检测该第一线程池的各个线程池返回的线程借用响应中是否存在确认借用。当该第一线程池的各个线程池返回的线程借用响应中存在确认借用时,则终端可以统计该第一线程池的各个线程池返回的线程借用响应中确认借用的线程池数量。当该线程池数量大于1时,则终端可以从返回线程借用响应为确认借用的线程池中任选一个线程池作为上述目标任务的执行线程池。当该线程池数量等于1时,则终端可以将该第一线程池中返回线程借用响应为确认借用的线程池确定为该目标任务的执行线程池。终端可以基于该执行线程池中的任一空闲线程处理该目标任务。当该第一线程池的各个线程池返回的线程借用响应中不存在确认借用时,即返回的线程借用响应全部为拒绝借用,则终端可以将上述目标任务存储至任务缓存空间以等待上述目标线程池中的空闲线程。终端可以定时检测该目标线程池中是否存在空闲线程,当该目标线程池中存在空闲线程时,可以基于该目标线程池中的空闲线程处理该目标任务。

例如,假设目标线程池为图2中的线程池d,第一线程池就为线程池数据库中的线程池a、b以及c。终端按照接收到的线程借用响应的时间先后顺序检测线程池a、b、c返回的线程借用响应是否为确认借用。当检测到任一线程借用响应为确认借用时,统计线程池a、b、c返回的线程借用响应为确认借用的线程池数量。假设线程池b和c返回的线程借用响应均为确认借用,则线程池数量为2。由于线程池数量2大于1,终端从线程池b和c中任选一个线程池如线程池c作为目标任务的执行线程池。假设线程池c中的空闲线程有c1,c3,c4三个线程,终端基于线程池c中的任一空闲线程如c3处理目标任务。其中,第一线程池中的各个线程池检测到各自的第二配置参数指示线程池中的线程允许被其他线程池借用且存在任一空闲线程时,就返回确认借用的线程借用响应。可选的,线程池c中的空闲线程(c1,c3,c4)可以共同竞争,抢夺目标任务,哪个空闲线程抢到就是哪个空闲线程处理目标任务。假设线程池c中的空闲线程c4抢到目标任务,那么终端就基于线程池c中的空闲线程c4处理目标任务。

在一些可行的实施方式中,若上述第一线程池的各个线程池返回的线程借用响应中存在确认借用,则终端可以将上述第一线程池中第一个返回确认借用的线程池作为上述目标任务的执行线程池,并可以基于该执行线程池中的任一空闲线程处理该目标任务。例如,假设目标线程池为图2中的线程池d,第一线程池就为线程池数据库中的线程池a、b以及c。假设线程池b和c返回的线程借用响应均为确认借用,且线程池b比线程池c先返回确认借用的线程借用响应,那么终端将线程池b作为目标任务的执行线程池,基于线程池b中的任一空闲线程b2处理目标任务。

在本申请实施例中,终端通过获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,当检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,向第一线程池发送线程借用请求,该第一线程池为该目标线程池之外的一个或者多个线程池,接收该第一线程池针对该线程借用请求返回的线程借用响应,根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,并基于该执行线程池中的任一空闲线程处理该目标任务。可以减少任务的等待时长,提高任务的处理效率。

参见图3,是本申请实施例提供的基于线程池的任务处理方法的另一示意流程图。如图3所示,该基于线程池的任务处理方法可包括步骤:

s301,终端获取目标任务的任务类型,并获取目标任务的任务类型对应的目标线程池。

在一些可行的实施方式中,本申请实施例中的步骤s301可参考图1所示实施例的步骤s101的实现方式,在此不再赘述。

s302,终端检测目标线程池的至少一个线程中是否存在未被占用的空闲线程。

s303,若检测到目标线程池的至少一个线程中存在未被占用的空闲线程,则终端基于目标线程池中的任一空闲线程处理目标任务。

s304,若检测到目标线程池的至少一个线程中不存在未被占用的空闲线程,则终端获取目标线程池的第一配置参数。

在一些可行的实施方式中,终端可以检测上述目标线程池中是否存在未被任务占用的空闲线程。当检测到该目标线程池中存在空闲线程时,说明该目标线程池中存在可用的线程,则终端可以基于该目标线程池中的任一空闲线程处理上述目标任务。当检测到该目标线程池中不存在空闲线程时,说明该目标线程池中的线程全部被占用(即正在处理任务),则终端可以从预设的线程池数据库中获取该目标线程池的第一配置参数。该第一配置参数可以用于指示线程池是否允许借用其他线程池中的线程,即是否可借用本线程池之外的线程。

例如,假设目标线程池为图2中的线程池d,假设线程池d中包括5个线程,分别为线程d1、线程d2、线程d3、线程d4以及线程d5。终端依次检测线程池d中的5个线程d1、d2、d3、d4以及d5是否被占用。当检测到线程池d中的全部线程(d1、d2、d3、d4以及d5)都被占用(即不存在空闲线程)时,则获取线程池d的第一配置参数。当检测到线程池d中有一个线程未被占用(即空闲线程)时,就基于线程池d中的这个空闲线程处理目标任务。当检测到线程池d中存在至少2个未被占用的线程时,则从至少2个未被占用的线程中任选一个线程处理目标任务。可选的,当检测到线程池d中存在至少2个未被占用的线程时,则至少2个未被占用的线程(如空闲线程d2和d4)共同竞争,抢夺目标任务,假设空闲线程d2抢到目标任务,那么终端就基于线程池d中的空闲线程d2处理该目标任务。

s305,若目标线程池的第一配置参数指示目标线程池允许借用其他线程池中的线程,则终端向第一线程池中的至少一个第二线程池发送线程借用请求。

s306,终端接收第一线程池的至少一个第二线程池针对线程借用请求返回的线程借用响应。

s307,终端根据线程借用响应从第一线程池的至少一个第二线程池中确定出目标任务的执行线程池,并基于执行线程池中的任一空闲线程处理目标任务。

在一些可行的实施方式中,终端在获取到上述目标线程池的第一配置参数之后,可以检测该目标线程池的第一配置参数为是或否。当检测到该目标线程池的第一配置参数为是时,说明该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,则终端可以从线程池数据库中获取第一线程池,该第一线程池为目标线程池之外的一个或多个线程池,该第一线程池中包括至少一个第二线程池。该第二线程池的第二配置参数可以指示该第二线程池中的线程允许被其他线程池借用。终端可以向该第一线程池中的至少一个第二线程池发送线程借用请求,该线程借用请求用于向第一线程池的各个第二线程池请求借用未被占用的空闲线程。各个第二线程池接收到线程借用请求之后,可以检测是否存在空闲线程。当第二线程池中存在空闲线程时,可以针对该线程借用请求返回确认借用的线程借用响应。当第二线程池中不存在空闲线程时,可以针对该线程借用请求返回拒绝借用的线程借用响应。

终端可以接收该第一线程池的各个第二线程池针对该线程借用请求返回的线程借用响应。若该第一线程池中包括一个第二线程池时,终端可以检测该第二线程池返回的线程借用响应是否为确认借用。当该第二线程池返回的线程借用响应为确认借用时,说明该第二线程池中的线程允许被其他线程池借用且存在空闲线程,则终端可以将该第二线程池确定为上述目标任务的执行线程池,并可以基于该执行线程池中的任一空闲线程处理该目标任务。当该第二线程池返回的线程借用响应为拒绝借用时,说明该第二线程池中的线程不允许被其他线程池借用或不存在空闲线程,则终端可以将上述目标任务存储至任务缓存空间以等待上述目标线程池中的空闲线程。终端可以定时检测该目标线程池中是否存在空闲线程,当该目标线程池中存在空闲线程时,可以基于该目标线程池中的空闲线程处理该目标任务。

若该第一线程池中包括多个第二线程池时,终端可以检测该第一线程池的各个第二线程池返回的线程借用响应中是否存在确认借用。当该第一线程池的各个第二线程池返回的线程借用响应中存在确认借用时,则终端可以统计该第一线程池的各个第二线程池返回的线程借用响应中确认借用的线程池数量。当该线程池数量大于1时,则终端可以从返回线程借用响应为确认借用的第二线程池中任选一个第二线程池作为上述目标任务的执行线程池,并可以基于该执行线程池中的任一空闲线程处理该目标任务。当该第一线程池的各个第二线程池返回的线程借用响应中不存在确认借用时,即返回的线程借用响应全部为拒绝借用,则终端可以将上述目标任务存储至任务缓存空间以等待上述目标线程池中的空闲线程。终端可以定时检测该目标线程池中是否存在空闲线程,当该目标线程池中存在空闲线程时,可以基于该目标线程池中的空闲线程处理该目标任务。本申请实施例在目标线程池中不存在空闲线程时,向第一线程池中的第二线程池(即可借用线程池)发送线程借用请求,可以缩小发送请求的线程池范围,进一步减少任务的等待时长,提高任务的处理效率。

其中,各个线程池与其可借用线程池可以关联存储在线程池数据库。例如,如图2所示的线程池a的可借用线程池为线程池b和线程池c,线程池b的可借用线程池为线程池c,线程池c的可借用线程池为空,线程池d的可借用线程池为线程池b和线程池c。假设目标线程池为线程池d,由于线程池d的第一配置参数为时,那么线程池d允许向其他线程池借用线程。假设目标线程池为线程池d,终端从线程池数据库中获取第一线程池(线程池a、b、c)中的第二线程池(即可借用线程池)为线程池b和c,并分别向线程池b、c发送线程借用请求。线程池b和c在接收到线程借用请求之后,分别检测线程池b和c中是否存在空闲线程。当任一线程池检测到存在任一空闲线程时,则针对线程借用请求返回确认借用的线程借用响应。终端统计返回的线程借用响应为确认借用的线程池数量,假设线程池b和c均返回的线程借用响应是确认借用,则线程池数量为2,大于1,从线程池b和c中任选一个线程池b作为目标任务的执行线程池,再基于线程池b中的任一空闲线程处理目标任务。假设只有线程池c返回的线程借用响应是确认借用,那么线程池c就是目标任务的执行线程池,再基于线程池c中的任一空闲线程处理目标任务。可选的,终端可以检测第一线程池中第一个返回确认借用的第二线程池,并将第一个返回确认借用的第二线程池作为目标任务的执行线程池,从执行线程池中确定出一个空闲线程处理上述目标任务。假设线程池c是第一个返回确认借用的线程池。终端将线程池c作为目标任务的执行线程池。假设线程池c中的空闲线程有c1,c3,c4,空闲线程c1,c3,c4共同竞争,抢夺目标任务。假设c4抢到目标任务,那么就基于线程池c中的线程c4处理目标任务。

s308,若目标线程池的第一配置参数指示目标线程池不允许借用其他线程池中的线程,则终端将目标任务存储至任务缓存空间以等待目标线程池中的空闲线程。

s309,当目标线程池中存在空闲线程时,则终端基于目标线程池中的空闲线程处理目标任务。

在一些可行的实施方式中,当检测到上述目标线程池的第一配置参数为否时,说明该目标线程池的第一配置参数指示该目标线程池不允许借用其他线程池中的线程,则终端可以将上述目标任务存储至任务缓存空间以等待上述目标线程池中的空闲线程。终端可以定时检测该目标线程池中是否存在空闲线程,当该目标线程池中存在空闲线程时,可以基于该目标线程池中的空闲线程处理该目标任务。

在本申请实施例中,终端通过获取目标任务的任务类型,并获取目标任务的任务类型对应的目标线程池。检测目标线程池的至少一个线程中是否存在未被占用的空闲线程。当检测到目标线程池的至少一个线程中存在未被占用的空闲线程时,基于目标线程池中的任一空闲线程处理目标任务;当检测到目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取目标线程池的第一配置参数。若目标线程池的第一配置参数指示目标线程池允许借用其他线程池中的线程,则向第一线程池中的至少一个第二线程池发送线程借用请求,接收第一线程池的至少一个第二线程池针对线程借用请求返回的线程借用响应,并根据线程借用响应从第一线程池的至少一个第二线程池中确定出目标任务的执行线程池,并基于执行线程池中的任一空闲线程处理目标任务。若目标线程池的第一配置参数指示目标线程池不允许借用其他线程池中的线程,则将目标任务存储至任务缓存空间以等待目标线程池中的空闲线程,当目标线程池中存在空闲线程时,则基于目标线程池中的空闲线程处理目标任务。提供了一个更完整的任务处理方案,同时进一步减少了任务的等待时长,提高了任务的处理效率。

参见图4,是本申请实施例提供的任务处理装置的一示意性框图。如图4所示,本申请实施例的任务处理装置包括:

第一获取模块10,用于获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,该目标线程池中包括至少一个线程;

第二获取模块20,用于在检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,该第一配置参数用于指示线程池是否允许借用其他线程池中的线程;

发送模块30,用于当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程时,向第一线程池发送线程借用请求,该线程借用请求用于请求借用未被占用的空闲线程,该第一线程池为该目标线程池之外的一个或者多个线程池;

接收模块40,用于接收该第一线程池针对该线程借用请求返回的线程借用响应;

确定模块50,用于根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池;

处理模块60,用于基于该执行线程池中的任一空闲线程处理该目标任务。

在一些可行的实施方式中,若该第一线程池为该目标线程池之外的一个线程池。上述确定模块50具体用于:当该第一线程池返回的线程借用响应为确认借用时,将该第一线程池确定为该目标任务的执行线程池。其中,该确认借用为该第一线程池的第二配置参数指示该第一线程池中的线程允许被其他线程池借用且存在空闲线程时返回的线程借用响应,该第二配置参数用于指示线程池中的线程是否允许被其他线程池借用。

在一些可行的实施方式中,若该第一线程池为该目标线程池之外的多个线程池。上述确定模块50具体用于:当该第一线程池的各个线程池返回的线程借用响应中存在确认借用时,统计该第一线程池的各个线程池返回的该线程借用响应为确认借用的线程池数量;当该线程池数量大于1时,从返回线程借用响应为确认借用的线程池中任选一个线程池作为该目标任务的执行线程池。其中,该确认借用为该第一线程池中存在空闲线程且第二配置参数指示线程池中的线程允许被其他线程池借用的线程池返回的线程借用响应。

在一些可行的实施方式中,该装置还包括存储模块70。该存储模块70,用于当该第一线程池返回的线程借用响应均不为确认借用时,将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程;上述处理模块60,还用于当该目标线程池中存在空闲线程时,基于该目标线程池中的空闲线程处理该目标任务。

在一些可行的实施方式中,该第一线程池中包括至少一个第二线程池,该第二线程池的第二配置参数指示该第二线程池中的线程允许被其他线程池借用。上述发送模块30,具体用于:当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程时,向第一线程池中的至少一个第二线程池发送线程借用请求。上述接收模块40,具体用于:接收该第一线程池的至少一个第二线程池针对该线程借用请求返回的线程借用响应。上述确定模块50,具体用于:根据该线程借用响应从该第一线程池的至少一个第二线程池中确定出该目标任务的执行线程池。

在一些可行的实施方式中,上述存储模块70,还用于当该目标线程池的第一配置参数指示该目标线程池不允许借用其他线程池中的线程时,将该目标任务存储至任务缓存空间以等待该目标线程池中的空闲线程。上述处理模块60,还用于当该目标线程池中存在空闲线程时,基于该目标线程池中的空闲线程处理该目标任务。

在一些可行的实施方式中,上述处理模块60,还用于当检测到该目标线程池的至少一个线程中存在未被占用的空闲线程时,基于该目标线程池中的任一空闲线程处理该目标任务。

具体实现中,上述任务处理装置可通过上述各个模块执行上述图1或图3所提供的实现方式中各个步骤所提供的实现方式,实现上述各实施例中所实现的功能,具体可参见上述图1或图3所示的方法实施例中各个步骤提供的相应描述,在此不再赘述。

在本申请实施例中,任务处理装置通过获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,当检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程,向第一线程池发送线程借用请求,该第一线程池为该目标线程池之外的一个或者多个线程池,接收该第一线程池针对该线程借用请求返回的线程借用响应,根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,并基于该执行线程池中的任一空闲线程处理该目标任务。可以减少任务的等待时长,提高任务的处理效率。

参见图5,是本申请实施例提供的终端的一示意性框图。如图5所示,本申请实施例中的终端可以包括:一个或多个处理器501;一个或多个输入设备502,一个或多个输出设备503和存储器504。上述处理器501、输入设备502、输出设备503和存储器504通过总线505连接。存储器502用于存储计算机程序,所述计算机程序包括程序指令,处理器501用于执行存储器502存储的程序指令。

其中,处理器501被配置用于调用所述程序指令执行:获取目标任务的任务类型,并获取该目标任务的任务类型对应的目标线程池,该目标线程池中包括至少一个线程;当检测到该目标线程池的至少一个线程中不存在未被占用的空闲线程时,获取该目标线程池的第一配置参数,该第一配置参数用于指示线程池是否允许借用其他线程池中的线程。上述输出设备503用于当该目标线程池的第一配置参数指示该目标线程池允许借用其他线程池中的线程时,向第一线程池发送线程借用请求,该线程借用请求用于请求借用未被占用的空闲线程,该第一线程池为该目标线程池之外的一个或者多个线程池。上述输入设备502用于接收该第一线程池针对该线程借用请求返回的线程借用响应。处理器501还用于根据该线程借用响应从该第一线程池中确定出该目标任务的执行线程池,并基于该执行线程池中的任一空闲线程处理该目标任务。

应当理解,在本申请实施例中,所称处理器501可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

输入设备502可以包括触控板、输入接口、麦克风等,输出设备503可以包括显示器(lcd等)、扬声器、输出接口等。

该存储器504可以包括只读存储器和随机存取存储器,并向处理器501提供指令和数据。存储器504的一部分还可以包括非易失性随机存取存储器。例如,存储器504还可以存储设备类型的信息。

具体实现中,本申请实施例中所描述的处理器501、输入设备502、输出设备503可执行本申请实施例提供的基于线程池的任务处理方法中所描述的实现方式,也可执行本申请实施例所描述的任务处理装置的实现方式,在此不再赘述。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时实现图1或图3所示的基于线程池的任务处理方法,具体细节请参照图1或图3所示实施例的描述,在此不再赘述。

上述计算机可读存储介质可以是前述任一实施例所述的任务处理装置或电子设备的内部存储单元,例如电子设备的硬盘或内存。该计算机可读存储介质也可以是该电子设备的外部存储设备,例如该电子设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,该计算机可读存储介质还可以既包括该电子设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该电子设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请是参照本申请实施例的方法、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程诊疗数据的处理设备的处理器以产生一个机器,使得通过计算机或其他可编程诊疗数据的处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程诊疗数据的处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程诊疗数据的处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1