线程资源分配的方法及装置与流程

文档序号:17720047发布日期:2019-05-22 02:05阅读:361来源:国知局
线程资源分配的方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种线程资源分配的方法及装置。



背景技术:

随着科学技术的发展与网络技术的全面普及,人们对各类业务的需求愈加旺盛,对于计算机的处理水平也提出了越来越高的要求。在基于客户端/服务端模式的服务器程序中,为了充分利用现有的硬件资源,人们提出多线程技术解决多个线程并发执行的问题。但是,如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。基于此,为了减少线程的创建时间和销毁时间,人们又提出了线程池技术,使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务。然而,这样的方式线程的复用形式单一,灵活性差,适用性不高。



技术实现要素:

本申请实施例提供一种线程资源分配的方法及装置,可实现线程资源对重要业务的倾斜,提高线程资源的分配灵活性,适用性高。

第一方面,本申请实施例提供了一种线程资源分配的方法,该方法包括:

接收目标业务触发的任务处理请求,确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级;

若上述目标任务的任务优先级是第一优先级,则根据上述任务标识确定与上述目标任务对应的目标子资源线程池;

若上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源,则将上述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配以获取用于执行上述目标任务的目标线程资源,上述其他任务的任务优先级包括第二优先级,上述第一优先级对应的任务的处理顺序优先于上述第二优先级对应的任务的处理顺序;

基于上述目标线程资源执行上述目标任务。

结合第一方面,在一种可能的实施方式中,上述接收目标业务触发的任务处理请求之前,上述方法还包括:

将包含多个线程资源的资源线程池划分为多个子资源线程池,其中,一个子资源线程池中包括至少一个线程资源,上述多个子资源线程池中至少包括上述目标子资源线程池;

设定上述多个子资源线程池中各个子资源线程池的线程池标识;

其中,任一子资源线程池的线程池标识用于确定上述任一子资源线程池中的线程资源用于执行的任务。

结合第一方面,在一种可能的实施方式中,上述根据上述任务标识确定与上述目标任务对应的目标子资源线程池包括:

从上述各个子资源线程池的线程池标识中确定出上述任务标识对应的目标线程池标识,将上述目标线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

结合第一方面,在一种可能的实施方式中,上述确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级之前,上述方法还包括:

获取至少两种任务类型,上述至少两种任务类型中同一任务类型的任务由同一任务标识标记;

设定上述至少两种任务类型中各种任务类型对应的任务优先级,上述任务优先级中至少包括上述第一优先级和上述第二优先级,上述各种任务类型对应的任务优先级用于确定上述各种任务类型的任务的处理顺序。

结合第一方面,在一种可能的实施方式中,上述方法还包括:

设定上述各个子资源线程池对应的一组信号量,其中,任一子资源线程池对应的一组信号量中一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量;

当查询到上述目标子资源线程池对应的第一信号量所指示的线程资源数量为空时,确定上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源;

其中,上述第一信号量用于指示上述目标子资源线程池中用于执行第一任务类型的任务的线程资源数量,上述第一任务类型的任务中包括上述目标任务。

结合第一方面,在一种可能的实施方式中,上述将上述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配包括:

修改上述第一信号量以增加上述第一信号量所指示的线程资源数量;

修改上述目标子资源线程池对应的一组信号量中除去上述第一信号量之外的第二信号量以减少上述第二信号量所指示的线程资源数量;

其中,上述第二信号量用于指示上述目标子资源线程池中用于执行第二任务类型的任务的线程资源数量,上述第二任务类型的任务包括上述其他任务。

第二方面,本申请实施例提供了一种线程资源分配的装置,该装置包括:

接收单元,用于接收目标业务触发的任务处理请求,确定所述任务处理请求所请求处理的目标任务的任务标识和任务优先级;

匹配单元,用于在所述接收单元确定所述目标任务的任务优先级是第一优先级时,根据所述任务标识确定与所述目标任务对应的目标子资源线程池;

分配单元,用于在所述目标子资源线程池中没有用于执行所述目标任务的空闲线程资源时,将所述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配以获取用于执行所述目标任务的目标线程资源,所述其他任务的任务优先级还包括第二优先级,所述第一优先级对应的任务的处理顺序优先于所述第二优先级对应的任务的处理顺序;

执行单元,用于基于所述分配单元重新分配的所述目标线程资源执行所述目标任务。

结合第二方面,在一种可能的实施方式中,上述装置还包括:

划分单元,用于将包含多个线程资源的资源线程池划分为多个子资源线程池,其中,一个子资源线程池中包括至少一个线程资源,上述多个子资源线程池中至少包括上述目标子资源线程池;

划分单元,还用于设定上述多个子资源线程池中各个子资源线程池的线程池标识;

其中,任一子资源线程池的线程池标识用于确定上述任一子资源线程池中的线程资源用于执行的任务。

结合第二方面,在一种可能的实施方式中,上述匹配单元具体用于从上述各个子资源线程池的线程池标识中确定出上述任务标识对应的目标线程池标识,将上述目标线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

结合第二方面,在一种可能的实施方式中,上述装置还包括:

获取单元,用于获取至少两种任务类型,上述至少两种任务类型中同一任务类型的任务由同一任务标识标记;

获取单元,还用于设定上述至少两种任务类型中各种任务类型对应的任务优先级,上述任务优先级中至少包括上述第一优先级和上述第二优先级,上述各种任务类型对应的任务优先级用于确定上述各种任务类型的任务的处理顺序。

结合第二方面,在一种可能的实施方式中,上述分配单元具体用于:

设定上述各个子资源线程池对应的一组信号量,其中,任一子资源线程池对应的一组信号量中一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量;

当查询到上述目标子资源线程池对应的第一信号量所指示的线程资源数量为空时,确定上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源;

其中,上述第一信号量用于指示上述目标子资源线程池中用于执行第一任务类型的任务的线程资源数量,上述第一任务类型的任务中包括上述目标任务。

结合第二方面,在一种可能的实施方式中,上述分配单元具体用于:

修改上述第一信号量以增加上述第一信号量所指示的线程资源数量;

修改上述目标子资源线程池对应的一组信号量中除去上述第一信号量之外的第二信号量以减少上述第二信号量所指示的线程资源数量;

其中,上述第二信号量用于指示上述目标子资源线程池中用于执行第二任务类型的任务的线程资源数量,上述第二任务类型的任务包括上述其他任务。

第三方面,本申请实施例提供了一种终端设备,该终端设备包括处理器和存储器,该处理器和存储器相互连接。该存储器用于存储支持该终端设备执行上述第一方面和/或第一方面任一种可能的实现方式提供的方法的计算机程序,该计算机程序包括程序指令,该处理器被配置用于调用上述程序指令,执行上述第一方面和/或第一方面任一种可能的实施方式所提供的方法。

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

实施本申请实施例,具有如下有益效果:

本申请实施例提供的方法可监控分配给执行各业务所触发的任务的线程资源的使用情况,然后在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源做灵活的调整,适用性高。

附图说明

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

图1是本申请实施例提供的线程资源分配的方法一流程示意图;

图2是本申请实施例提供的线程资源分配的方法的另一流程示意图;

图3是本申请实施例提供的线程资源分配的装置的结构示意图;

图4是本申请实施例提供的终端设备的结构示意图。

具体实施方式

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

本申请实施例提供的线程资源分配的方法及装置,可适用于智能手机、台式电脑、笔记本电脑、平板电脑以及可穿戴设备等终端设备,具体可根据实际应用场景确定,在此不做限制。为方便描述,本申请实施例将以终端设备为例进行说明。

本申请实施例提供的线程资源分配的方法可广泛适用于各种网上业务办理的系统,用户通过客户端的业务操作界面选择需要办理的目标业务,服务端在接收上述用户所要办理的目标业务所触发的任务处理请求后,通过解析上述任务处理请求中的关键字段所携带的信息可确定出目标任务的任务标识和任务优先级。然后,通过已经建立好的任务标识与子资源线程池的线程池标识之间的对应关系,确定出负责执行上述目标任务的目标子资源线程池。当上述目标子资源线程池中有用于执行上述目标任务的空闲线程资源时,则直接利用空闲线程资源执行上述目标任务;当上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源且上述目标任务属于重要业务触发的第一优先级的任务时,则在目标子资源线程池中执行线程资源重新分配的操作,将用于执行其他任务的一部分线程资源分配给执行上述目标任务使用。本申请实施例提供的方法可监控分配给执行各业务所触发的任务的线程资源的使用情况,并且在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源做灵活的调整,适用性高。

以下将结合图1至图4对本申请实施例提供的方法及装置分别进行详细说明。本申请实施例提供的方法中可用于包括线程池的划分、任务类型的获取、任务处理请求的接收、目标任务对应的目标子资源线程池的确定,线程资源的分配以及目标任务的执行等数据处理阶段。其中,上述各个数据处理阶段的实现方式可参见如下图1至图2所示的实现方式。

参见图1,图1为本申请实施例提供的线程资源分配的方法的一流程示意图。如图1所示,本申请实施例提供的方法可以包括如下步骤:

s1、接收目标业务触发的任务处理请求,确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级。

在一些可行的实施方式中,多线程并发常见于包括web服务器和/或其他各种专用服务器的后台多任务并行处理的应用场景中,例如常见的多线程并发应用场景中包括各类服务器的后台多任务并行处理的应用场景,如定时向大量(100w以上)的用户发送邮件,多任务异步处理,多任务的数据分布式计算等。

在一些可行的实施方式中,终端设备接收用户办理业务时所触发的任务处理请求,其中,上述任务处理请求包括处理任务和关键字段。通常情况下,用户是通过利用终端设备上安装的应用类软件向服务器发出任务处理请求的。其中,应用类软件包括但不限于即时通信类软件、购物类软件、搜索类软件、邮箱客户端、休闲娱乐类软件等,具体可根据实际应用场景确定,在此不做限制。上述任务标识用于唯一标记任务类型,上述任务类型可以包括计算型任务、通信型任务、查询型任务、搜索型任务等,具体可根据实际应用场景确定,在此不做限制。上述任务标识可以是从任务类型的特征或者执行任务的算法中提取出的关键字符或者是无特殊意义的字符。其中,上述任务类型还对应任务优先级,上述任务优先级中至少包括第一优先级和第二优先级,各种任务类型的任务优先级用于确定上述各种任务类型对应的任务的处理顺序,上述第一优先级对应的任务的处理顺序优先于上述第二优先级对应的任务的处理顺序。例如,假设只有两种任务类型,当任务是重要业务或者时效性要求高的业务触发的任务时,设定上述任务的任务优先级为第一优先级;当上述任务不是重要业务或者时效性要求高的业务触发的任务时,设定上述任务的任务优先级为第二优先级。在接收上述目标业务触发的任务处理请求后,服务器通过解析上述任务处理请求,可得到任务处理请求中的关键字段里所携带的关于目标任务的任务标识和任务优先级的信息,然后通过得到的上述信息能够确定上述目标任务的任务标识和任务优先级。

举例来说,假设用户通过终端设备上某一即时通讯类软件发出了一个语音通话任务处理请求,上述语音通话任务处理请求包括语音通话任务和关键字段,其中,语音通话任务即是目标任务。当服务器接收上述语音通话任务处理请求后,则对上述语音通话任务处理请求进行解析,可得到语音通话任务处理请求中关键字段里所携带的关于语音通话任务的任务标识和任务优先级的信息,根据得到的上述信息确定语音通话任务的任务标识和任务优先级分别为“通信”和“第一优先级”。

s2、若上述目标任务的任务优先级是第一优先级,则根据上述任务标识确定与上述目标任务对应的目标子资源线程池。

在一些可行的实施方式中,将包含n个线程资源的资源线程池根据业务需求划分成n个子资源线程池并设定每个子资源线程池的线程池标识,其中,上述n个子资源线程池中每个子资源线程池里至少包括1个线程资源,线程资源用于执行接收到的任务。可以理解的是,为了方便资源的统一管理,任务标识与线程池标识之间存在唯一确定的对应关系且这种对应关系是一一对应。即一个任务标识只能对应一个线程池标识,该对应关系可通过任务标识与线程池标识之间的标识匹配而建立。于是,在接收目标任务后,根据目标任务的任务标识,可以从n个线程池标识中找到与目标任务的任务标识符合标识匹配关系的线程池标识,并将满足匹配关系的线程池标识所对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

s3、若上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源,则将上述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配以获取用于执行上述目标任务的目标线程资源。

在一些可行的实施方式中,当上述目标任务进入目标子资源线程池后,可通过查询确定在目标子资源线程池中是否有可用的用于执行上述目标任务的空闲线程资源。可以理解的是,当查询到有可用的用于执行上述目标任务的空闲线程资源时,则利用空闲的线程资源执行上述目标任务;而当查询到没有可用的用于执行上述目标任务的空闲线程资源时,即用于执行上述目标任务的线程资源在当前时刻被全部占用时,则进行线程资源的重新分配。在线程资源重新分配时,在目标子资源线程池中按一定比例减少其他任务的线程资源使用数,增加负责执行目标任务的目标线程资源的使用数。

s4、基于上述目标线程资源执行上述目标任务。

在一些可行的实施方式中,在重新分配线程资源后,基于上述目标线程资源执行上述目标任务。由于启动一个任务线程会占用一定的线程资源,因此为了避免资源的浪费,在目标任务执行结束后,通过释放占用的线程资源,完成对资源的回收,经回收的线程资源在线程池中等待下次使用。

在本申请实施例中,用户首先通过终端设备上安装的应用类软件向服务器发出任务处理请求,服务器在接收目标业务所触发的任务处理请求后,通过解析上述任务处理请求,可得到任务处理请求中的关键字段里所携带的关于任务标识和任务优先级的信息,通过得到的上述信息能够确定目标任务的任务标识和任务优先级。然后,通过任务标识与线程池标识之间的标识匹配关系找出与上述目标任务的任务标识对应的线程池标识,并将上述线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。若上述目标任务的任务优先级是第一优先级,当查询到上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源时,则在目标子资源线程池中执行线程资源重新分配的操作,将用于执行其他任务的一部分线程资源分配给执行上述目标任务使用并最终执行目标任务。本申请实施例提供的方法可监控分配给执行各业务所触发的任务的线程资源的使用情况,并且在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源做灵活的调整,适用性高。

图2为本申请的实施例提供的线程资源分配的方法的另一流程示意图,如图2所示,本申请实施例提供的方法可以包括如下步骤:

s21、将包含多个线程资源的资源线程池划分为多个子资源线程池,并设定上述多个子资源线程池中各个子资源线程池的线程池标识。

在一些可行的实施方式中,由于尽可能地将某一相同或相似的业务或者具有相似处理流程的业务所触发的任务划分在一个子资源线程池中执行能够实现资源的最大利用率以及资源的集中管理,因此根据业务参数,可将包含n个线程资源的资源线程池划分为n个子资源线程池,上述业务参数包括但不限于业务类型或者业务处理流程或者执行算法,具体可根据实际应用场景确定,在此不做限制。其中,上述n个子资源线程池中包括上述目标子资源线程池且n个子资源线程池中每个子资源线程池至少包括1个线程资源。然后设定上述n个子资源线程池中各个子资源线程池的线程池标识,其中,线程池标识可以是从上述各个子资源线程池中负责执行的一系列任务的特征或者算法中提取出来的关键字符或者是无特殊意义的字符,且线程池标识用于唯一区分负责处理不同任务的子资源线程池。例如,线程池标识可以是关键字符“计算”、“通信”、“查询”、“搜索”或者是无特殊意义的字符“a”、“b”、“c”、“d”。

s22、获取至少两种任务类型,并设定上述至少两种任务类型中各种任务类型对应的任务优先级。

在一些可行的实施方式中,从任务数据库中获取至少两种任务类型,上述至少两种任务类型中同一任务类型的任务由同一任务标识标记。例如,任务类型可以包括计算型任务、通信型任务、查询型任务、搜索型任务等。其中,任务标识可以是从任务类型的特征或者执行任务的算法中提取出的关键字符或者是无特殊意义的字符。例如,任务标识可以是从上述任务类型中提取出的关键字符“计算”、“通信”、“查询”、“搜索”或者是无特殊意义的字符“1”、“2”、“3”、“4”。

其中,设定上述至少两种任务类型中各种任务类型对应的任务优先级,上述任务优先级中至少包括第一优先级和第二优先级,上述各种任务类型对应的任务优先级用于确定上述各种任务类型的任务的处理顺序。其中,上述第一优先级对应的任务的处理顺序优先于上述第二优先级对应的任务的处理顺序。举例来说,假设有两种任务类型分别是通信型任务和查询型任务,其中,在即时通讯类软件中,通信型任务通常情况下都是属于时效性要求高的任务或重要性任务,而查询型任务则不属于时效性要求高的任务或重要性任务,因此在设定任务优先级时,将上述通信型任务设置为第一优先级,查询型任务设置为第二优先级。又举例来说,在搜索型引擎中,查询型任务通常情况下都是属于时效性要求高的任务或重要性任务,而通信型任务则不属于时效性要求高的任务或重要性任务,因此在设定任务优先级时,将上述查询型任务设置为第一优先级,通信型任务设置为第二优先级。当服务器同时接收到第一优先级的任务和第二优先级的任务的任务处理请求时,会优先响应第一优先级任务的处理请求,此时,可将第二优先级任务暂时搁置在缓存库中,后续定时启动。

s23、接收目标业务触发的任务处理请求,确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级。

在一些可行的实施方式中,终端设备接收用户办理业务时所触发的任务处理请求,其中,上述任务处理请求包括处理任务和关键字段。通常情况下,用户是通过利用终端设备上安装的应用类软件向服务器发出任务处理请求的。在接收上述目标业务触发的任务处理请求后,服务器通过解析上述任务处理请求,可得到任务处理请求中的关键字段里所携带的关于目标任务的任务标识和任务优先级的信息,然后通过得到的上述信息能够确定上述目标任务的任务标识和任务优先级。

举例来说,假设用户通过终端设备上某一即时通讯类软件发出了一个语音通话任务处理请求,上述语音通话任务处理请求包括语音通话任务和关键字段,其中,语音通话任务即是目标任务。当服务器接收上述语音通话任务处理请求后,则对上述语音通话任务处理请求进行解析,可得到语音通话任务处理请求中关键字段里所携带的关于语音通话任务的任务标识和任务优先级的信息,根据得到的上述信息确定语音通话任务的任务标识和任务优先级分别为“通信”和“第一优先级”。

s24、若上述目标任务的任务优先级是第一优先级,则根据上述任务标识与上述线程池标识之间的对应关系确定与上述目标任务对应的目标子资源线程池。

在一些可行的实施方式中,当上述任务标识和线程池标识是从任务的特征或者算法中提取出来的关键字符时,在接收上述目标任务后,为了确定与上述目标任务对应的目标子资源线程池,需要对所有的线程池标识进行遍历,然后通过将遍历到的线程池标识与目标任务的任务标识进行标识匹配,最后将匹配成功的线程池标识所对应的子资源线程池确定为目标任务所对应的目标子资源线程池。

举例来说,假设在即时通讯类软件中只有两种类型的任务,分别是查询型任务和通信型任务,且上述两种类型的任务将分别放在两个子资源线程池中执行。根据任务的特征或者算法,提取关键字符“查询”和“通信”分别作为上述查询型任务和通信型任务的任务标识。相应的,将负责处理这两类任务的子资源线程池的线程池标识也分别设置为“查询”和“通信”。于是,在接收一个新的通信任务后,可以遍历得到所有的线程池标识分别有“查询”和“通信”,然后利用上述新的通信任务的任务标识“通信”分别和遍历得到的线程池标识“查询”和“通信”进行匹配。可以理解的是,当上述新的通信任务的任务标识“通信”与遍历到的线程池标识“查询”进行匹配时,将匹配失败;当上述新的通信任务的任务标识“通信”与遍历到的线程池标识“通信”进行匹配时,匹配成功,于是将线程池标识“通信”所指代的子资源线程池确定为上述新的通信任务的目标子资源线程池。

可选的,在一些可行的实施方式中,子资源线程池所负责执行的一系列任务可能没有相似的特征。因此,当上述任务标识和线程池标识是无特殊意义的字符时,为了确定与目标任务对应的目标子资源线程池,需要事先建立一个任务标识与线程池标识的映射表,然后在接收目标任务后,根据上述目标任务的任务标识查找上述映射表以此找出与之对应的线程池标识,最后将上述线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

举例来说,假设有三种类型的任务分别是类型1,类型2,类型3,且上述三种类型的任务将分别放在三个子资源线程池中执行。于是,将这三种类型的任务的任务标识分别设置为1,2,3,将负责执行这三种类型的任务的子资源线程池的线程池标识分别设置为a,b,c,为了建立任务标识与线程池标识之间的关系,设置一个映射表,在映射表中,线程池标识a对应任务标识1,线程池标识b对应任务标识2,线程池标识c对应任务标识3。其中,无论是线程池标识还是任务标识,都是用于唯一标识子资源线程池和任务类型的。于是,当接收到一个新的属于类型1的任务时,根据类型1的任务标识1查询上述建立的映射表,可以找到任务标识1对应的线程池标识a,从而确定线程池标识a所指代的子资源线程池为上述任务为类型1的任务的目标子资源线程池。

s25、设定上述各个子资源线程池对应的一组信号量,在目标子资源线程池中,当查询到上述目标任务所对应的任务类型对应的信号量所指示的目标线程资源的数量为空时,修改上述目标子资源线程池中的各个信号量以此调整上述目标线程资源的分配。

在一些可行的实施方式中,针对愈加丰富的业务需求,各个子资源线程池在大多数情况下都会分别对应处理多个任务类型的任务。为了避免某一相同和/或相似任务类型的任务的任务处理请求在同一时刻占用大量的线程资源,从而导致其他任务类型的任务的任务处理请求处于长时间等待的情况发生,因此可以给上述n个子资源线程池分别设定其对应的一组信号量。其中,任一子资源线程池对应的一组信号量中的一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量。在目标子资源线程池中,当查询到上述目标任务所对应的任务类型对应的信号量所指示的目标线程资源的数量为空时,确定上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源。于是,通过修改上述目标任务所对应的任务类型对应的信号量以增加上述目标任务所对应的任务类型对应的信号量所指示的目标线程资源的数量,修改上述目标子资源线程池对应的一组信号量中除去上述目标任务所对应的任务类型对应的信号量之外的其他信号量以减少上述其他信号量所指示的线程资源的数量。其中,上述其他信号量用于指示上述目标子资源线程池中用于执行其他任务类型的任务的线程资源的数量。

在一些可行的实施方式中,上述修改信号量的方式包括根据修改指令进行修改或者根据预设的调整参数进行修改。其中,根据修改指令进行修改是在每次修改时,在修改指令中键入每组信号量中各个信号量的调整数量,这种修改方式比较灵活。根据预设的调整参数进行修改是在机器指令中预设一个调整参数,比如将调整参数设置为1,则每次调整的信号量幅度就是在原基础上加1或者减1。

举例来说,为了使线程资源得到有效利用,假设将有关保险类业务所触发的任务用一个子资源线程池来处理,那么,上述子资源线程池即为目标子资源线程池。其中,保险包括人寿保险,财产险,车险,旅游险,等等。由不同的保险业务所触发的任务包括保险购买,保单查询,保险理赔等等。针对上述目标子资源线程池,假设其最大并发线程数为15,即有15个可用的线程资源,于是可以设置一组信号量控制每类保险可使用的用于完成各项任务的线程资源的数量。比如设置信号量5用于指示5个线程数用于人寿保险,设置信号量3用于指示3个线程数用于财产保险,设置信号量4用于指示4个线程数用于车险,设置信号量2用于指示2个线程数用于旅游险,设置信号量1用于指示1个线程数用于其他类保险。可以理解的是,当某个节假日来临时,假日期间计划外出旅行的人是最多的,这时关于旅游险方面的业务办理会比在工作日期间繁忙。因此在某个法定节假日来临前夕,可以将旅游险业务所触发的所有任务的任务优先级设定为第一优先级。于是,在节假日的前后期间,当接收到一个旅游险的保险购买请求时,查询为上述旅游险所设置的信号量,当信号量不为空时,即线程资源的当前占用数量小于2个线程数时,说明有可用的空闲线程用于执行旅行险的购买请求,于是利用空闲的线程资源执行上述购买任务。当查询到为上述旅游险所设置的信号量为空时,即线程资源的当前占用数量等于2个线程数时,说明没有可用的空闲线程用于执行旅行险的购买任务请求。因此执行线程资源的重新分配,选择修改信号量的方式为通过修改指令进行修改时,可修改信号量4用于指示4个线程数用于人寿保险,修改信号量3用于指示3个线程数用于财产保险,修改信号量4用于指示4个线程数用于车险,修改信号量3用于指示3个线程数用于旅游险,修改信号量1用于指示1个线程数用于其他类保险。

可选的,在一些可行的实施方式中,为了实现线程资源的最大利用率,针对每个信号量还设置了借用标记,借用标记包括是否需要借用标记和是否允许借用标记。例如,需要借用的标记设置为00,不需要借用的标记设置为01,允许借用的标记设置为10,不允许借用的标记设置为11,当且仅当借用方需要借用且被借方允许借用时,才能满足借用条件。例如,当查询到上述目标任务的信号量为空时,根据需要借用标记00向其他任务的信号量提出借用请求,当其他任务的信号量不饱和且允许借用(即有允许借用标记10)时,借用成功,此时使用借用到的其他任务的空闲线程资源执行上述目标任务;当查询到其他任务的信号量同样为空或者不允许借用(即有不允许借用标记11)时,将上述目标任务加入阻塞等待队列,并设置一个观察信号监测上述目标任务的阻塞等待时间或者排队数,同时设置一个阻塞等待时间阈值或者排队数阈值,上述阻塞等待时间阈值或者排队数阈值的数值大小与开发者对服务器的性能要求相关。当上述目标任务的阻塞等待时间或者排队数小于阻塞等待时间阈值或者排队数阈值时,则一直等待,直到排在前面的任务执行结束后释放线程资源,再利用释放的线程资源执行上述目标任务;当上述目标任务的阻塞等待时间或者排队数大于或者等于阻塞等待时间阈值或者排队数阈值却依然没有空闲线程资源时,则执行线程资源的重新分配,分配方式如上述,在此不再赘述。

s26、基于上述目标线程资源执行上述目标任务。

在一些可行的实施方式中,在重新分配线程资源后,基于上述目标线程资源执行上述目标任务。由于启动一个任务线程会占用一定的线程资源,因此为了避免资源的浪费,在目标任务执行结束后,通过释放占用的线程资源,完成对资源的回收,经回收的线程资源在线程池中等待下次使用。

可选的,在一些可行的实施方式中,某类大需求量任务可能属于平行任务,即不存在优先级高低,在这种情况下,可通过增加机器的方式来提供服务,即每台机器拥有独立的信号量配置只用于负责执行某类大需求量任务,具体可参见上述单台机器下的实现方式,在此不再赘述。

在本申请实施例中,首先,在任务数据库中获取至少两种任务类型,并设定每种任务类型的任务标识和任务优先级,将包含n个线程资源的资源线程池划分成了n个子资源线程池并设定了每个子资源线程池的线程池标识。其中,任务标识和线程池标识之间通过标识匹配和/或映射表建立对应关系。然后用户通过终端设备上安装的应用类软件向服务器发出任务处理请求,服务器在接收目标业务所触发的任务处理请求后,通过解析上述任务处理请求,可得到任务处理请求中的关键字段里所携带的信息,从而通过上述信息确定出目标任务的任务标识和任务优先级。再利用建立的任务标识与线程池标识之间的对应关系确定负责执行上述目标任务对应的目标子资源线程池。在本申请实施例中为了避免某一相同和/或相似任务类型的任务的任务处理请求在同一时刻占用大量的线程资源,给上述n个子资源线程池分别设定了其对应的一组信号量。其中,任一子资源线程池对应的一组信号量中的一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量。在目标子资源线程池中,当查询到上述目标任务所对应的任务类型对应的信号量所指示的目标线程资源的数量为空时,则通过修改信号量以调整信号量所指示的线程资源的数量,然后利用重新分配后的线程资源执行上述目标任务。本申请实施例提供的方法可监控分配给执行各业务所触发的任务的线程资源的使用情况,并且在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源做灵活的调整,适用性高。

参见图3,图3为本申请提供的线程资源分配的装置的结构示意图,本申请实施例提供的线程资源分配的装置包括:

接收单元31,用于接收目标业务触发的任务处理请求,确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级;

匹配单元32,用于在上述接收单元31确定上述目标任务的任务优先级是第一优先级时,根据上述任务标识确定与上述目标任务对应的目标子资源线程池;

分配单元33,用于在上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源时,将上述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配以获取用于执行上述目标任务的目标线程资源,上述其他任务的任务优先级还包括第二优先级,上述第一优先级对应的任务的处理顺序优先于上述第二优先级对应的任务的处理顺序;

执行单元34,用于基于上述分配单元33重新分配的上述目标线程资源执行上述目标任务。

在一些可行的实施方式中,该线程资源分配装置还包括:

划分单元35,用于将包含多个线程资源的资源线程池划分为多个子资源线程池,其中,一个子资源线程池中包括至少一个线程资源,上述多个子资源线程池中至少包括上述目标子资源线程池;

划分单元35,还用于设定上述多个子资源线程池中各个子资源线程池的线程池标识;

其中,任一子资源线程池的线程池标识用于确定上述任一子资源线程池中的线程资源用于执行的任务。

在一些可行的实施方式中,上述匹配单元32用于:

从上述各个子资源线程池的线程池标识中确定出上述任务标识对应的目标线程池标识,将上述目标线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

在一些可行的实施方式中,该线程资源分配装置还包括:

获取单元36,用于获取至少两种任务类型,上述至少两种任务类型中同一任务类型的任务由同一任务标识标记;

获取单元36,还用于设定上述至少两种任务类型中各种任务类型对应的任务优先级,上述任务优先级中至少包括上述第一优先级和上述第二优先级,上述各种任务类型对应的任务优先级用于确定上述各种任务类型的任务的处理顺序。

在一些可行的实施方式中,上述分配单元33用于:

设定上述各个子资源线程池对应的一组信号量,其中,任一子资源线程池对应的一组信号量中一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量;

当查询到上述目标子资源线程池对应的第一信号量所指示的线程资源数量为空时,确定上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源;

其中,上述第一信号量用于指示上述目标子资源线程池中用于执行第一任务类型的任务的线程资源数量,上述第一任务类型的任务中包括上述目标任务。

在一些可行的实施方式中,上述分配单元33用于:

修改上述第一信号量以增加上述第一信号量所指示的线程资源数量;

修改上述目标子资源线程池对应的一组信号量中除去上述第一信号量之外的第二信号量以减少上述第二信号量所指示的线程资源数量;

其中,上述第二信号量用于指示上述目标子资源线程池中用于执行第二任务类型的任务的线程资源数量,上述第二任务类型的任务包括上述其他任务。

具体实现中,上述线程资源分配的装置可通过其内置的各个功能模块执行如上述图1至图2中各个步骤所提供的实现方式。例如,上述接收单元31可用于执行上述各个步骤中接收目标业务触发的任务处理请求,以及确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述匹配单元32可用于执行上述各个步骤中根据上述任务标识确定与上述目标任务对应的目标子资源线程池的相关步骤所描述的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述分配单元33可用于执行上述各个步骤中设定上述各个子资源线程池对应的一组信号量、查询上述目标子资源线程池对应的第一信号量所指示的线程资源数量、修改上述第一信号量以增加上述第一信号量所指示的线程资源数量等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述执行单元34可用于执行上述各个步骤中基于上述分配单元33重新分配的上述目标线程资源执行上述目标任务的相关步骤所描述的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述划分单元35可用于执行上述各个实施例中线程池的划分和线程池标识的设定等实现方式,具体可参见上述各个实施例所提供的实现方式,在此不再赘述。上述获取单元36可用于执行上述各个实施例中获取任务类型以及设定上述任务类型的任务标识和任务优先级等实现方式,具体可参见上述各个实施例所提供的实现方式,在此不再赘述。

在本申请实施例中,线程资源分配的装置可基于任务数据库获取至少两种任务类型,进而设定任一任务类型的任务标识和任务优先级,并基于业务参数将包含n个线程资源的资源线程池划分为n个子资源线程池,设定上述n个子资源线程池中各个子资源线程池的线程池标识,建立任务标识与线程池标识之间的对应关系。在接收目标业务触发的任务处理请求时,基于任务处理请求中中的关键字段里所携带的信息确定目标任务的任务标识和优先级,根据任务标识与线程标识之间的匹配关系从n个子资源线程池中找到目标子资源线程池,并通过在上述目标子资源线程池中对负责执行目标任务的线程资源的查询情况,对目标子资源线程池中的线程资源进行重新分配,并最终执行目标任务。本申请实施例提供的装置可监控分配给执行各业务所触发的任务的线程资源的使用情况,并且在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源做灵活的调整,适用范围广。

参见图4,图4是本申请实施例提供的终端设备的结构示意图。如图4所示,本实施例中的终端设备可以包括:一个或多个处理器401和存储器402。上述处理器401和存储器402通过总线403连接。存储器402用于存储计算机程序,该计算机程序包括程序指令,处理器401用于执行存储器402存储的程序指令,执行如下操作:

接收目标业务触发的任务处理请求,确定上述任务处理请求所请求处理的目标任务的任务标识和任务优先级;

若上述目标任务的任务优先级是第一优先级,则根据上述任务标识确定与上述目标任务对应的目标子资源线程池;

若上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源,则将上述目标子资源线程池中用于执行其他任务的线程资源进行线程资源重新分配以获取用于执行上述目标任务的目标线程资源,上述其他任务的任务优先级还包括第二优先级,上述第一优先级对应的任务的处理顺序优先于上述第二优先级对应的任务的处理顺序;

基于上述目标线程资源执行上述目标任务。

在一些可行的实施方式中,上述处理器401用于:

将包含多个线程资源的资源线程池划分为多个子资源线程池,其中,一个子资源线程池中包括至少一个线程资源,上述多个子资源线程池中至少包括上述目标子资源线程池;

设定上述多个子资源线程池中各个子资源线程池的线程池标识;

其中,任一子资源线程池的线程池标识用于确定上述任一子资源线程池中的线程资源用于执行的任务。

在一些可行的实施方式中,上述处理器401用于:

从上述各个子资源线程池的线程池标识中确定出上述任务标识对应的目标线程池标识,将上述目标线程池标识对应的子资源线程池确定为与上述目标任务对应的目标子资源线程池。

在一些可行的实施方式中,上述处理器401用于:

获取至少两种任务类型,上述至少两种任务类型中同一任务类型的任务由同一任务标识标记;

设定上述至少两种任务类型中各种任务类型对应的任务优先级,上述任务优先级中至少包括上述第一优先级和上述第二优先级,上述各种任务类型对应的任务优先级用于确定上述各种任务类型的任务的处理顺序。

在一些可行的实施方式中,上述处理器401用于:

设定上述各个子资源线程池对应的一组信号量,其中,任一子资源线程池对应的一组信号量中一个信号量用于指示上述任一子资源线程池中用于执行一种任务类型的任务的线程资源数量;

当查询到上述目标子资源线程池对应的第一信号量所指示的线程资源数量为空时,确定上述目标子资源线程池中没有用于执行上述目标任务的空闲线程资源;

其中,上述第一信号量用于指示上述目标子资源线程池中用于执行第一任务类型的任务的线程资源数量,上述第一任务类型的任务中包括上述目标任务。

在一些可行的实施方式中,上述处理器401用于:

修改上述第一信号量以增加上述第一信号量所指示的线程资源数量;

修改上述目标子资源线程池对应的一组信号量中除去上述第一信号量之外的第二信号量以减少上述第二信号量所指示的线程资源数量;

其中,上述第二信号量用于指示上述目标子资源线程池中用于执行第二任务类型的任务的线程资源数量,上述第二任务类型的任务包括上述其他任务。

应当理解,在一些可行的实施方式中,上述处理器401可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。该存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供指令和数据。存储器402的一部分还可以包括非易失性随机存取存储器。例如,存储器402还可以存储设备类型的信息。

具体实现中,上述终端设备可通过其内置的各个功能模块执行如上述图1至图2中各个步骤所提供的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。

在本申请实施例中,终端设备可基于任务数据库获取至少两种任务类型,进而设定任一任务类型的任务标识和任务优先级,并基于业务参数将包含n个线程资源的资源线程池划分为n个子资源线程池,设定上述n个子资源线程池中各个子资源线程池的线程池标识,建立任务标识与线程池标识之间的对应关系。在接收目标业务触发的任务处理请求时,基于任务处理请求中中的关键字段里所携带的信息确定目标任务的任务标识和优先级,根据任务标识与线程标识之间的匹配关系从n个子资源线程池中找到目标子资源线程池,并通过在上述目标子资源线程池中对负责执行目标任务的线程资源的查询情况,对目标子资源线程池中的线程资源进行重新分配,并最终执行目标任务。本申请实施例提供的装置可监控分配给执行各业务所触发的任务的线程资源的使用情况,并且在重新分配线程资源时可实现对重要业务的倾斜,以及可实时的对线程资源进行灵活调整,适用范围广。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时实现图1至图2中各个步骤所提供的线程资源分配的方法,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。

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

本申请的权利要求书和说明书及附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

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