请求分配方法及装置与流程

文档序号:13735852阅读:213来源:国知局
请求分配方法及装置与流程
本发明实施例涉及互联网
技术领域
,特别涉及一种请求分配方法及装置。
背景技术
:接口是服务提供设备用于向服务请求设备提供资源和信息的通道,而接口请求正是服务请求设备向服务提供设备发送的用于获取其内部资源和信息的请求。当大量接口请求高并发时,如何更高效地处理这些接口请求,往往取决于分配这些接口请求的方法。在相关技术中,大多采用开启多个线程并行处理接口请求的方法,使得同一时间内可以处理多个接口请求,以缩短处理大量接口请求所需的耗时。相关技术在为多个线程分配接口请求时,通常为每个线程分配相同数量的接口请求。但是,不同的接口请求用于获取不同的资源和信息,且不同的接口请求的处理耗时也各不相同,通过上述分配方法,容易导致某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完,从而降低了请求队列的整体处理效率。技术实现要素:本发明实施例提供了一种请求分配方法及装置,可用于解决相关技术中因缺乏合理的分配方法而使得处理接口请求的耗时较长、效率较低的问题。所述技术方案如下:根据本发明实施例的第一方面,提供一种请求分配方法,所述方法包括:获取请求队列中k个待处理请求的预计处理耗时的总和,所述k为大于1的整数;根据所述k个待处理请求的预计处理耗时的总和,以及用于执行所述k个待处理请求的线程数量n,计算所述n个线程中的每一个线程对应的切片时间,所述n为大于1的整数;根据所述n个线程中的每一个线程对应的切片时间,分别为所述n个线程中的每一个线程分配待处理请求,其中,为所述n个线程中的第i个线程分配的待处理请求的数量为p,所述p个待处理请求的预计处理耗时的总和不大于所述第i个线程对应的切片时间,所述p为小于k的正整数,所述i为小于或等于n的正整数。在一种可能的实施方式中,所述根据所述k个待处理请求的预计处理耗时的总和,以及用于执行所述k个待处理请求的线程数量n,计算所述n个线程中的每一个线程对应的切片时间,包括:获取所述k个待处理请求的超时率的平均值,所述待处理请求的超时率是指所述待处理请求发生超时情况的概率;若所述平均值等于0,则将所述k个待处理请求的预计处理耗时的总和与所述线程数量n相除,得到所述切片时间;若所述平均值大于0,则计算所述线程数量n和第一系数a的乘积,并将所述k个待处理请求的预计处理耗时的总和与所述乘积相除,得到所述切片时间,所述a大于1。在另一种可能的实施方式中,所述获取所述k个待处理请求的超时率的平均值,包括:获取每一种类型的请求的历史统计数据,其中,目标类型的请求的历史统计数据包括:所述目标类型的请求在历史统计周期内的统计数量,以及所述目标类型的请求中的每一个请求的实际处理耗时;根据每一种类型的请求的历史统计数据和每一种类型的请求的超时阈值,分别确定每一种类型的请求的超时率,其中,所述目标类型的请求的超时率等于所述目标类型的请求的超时数量与所述统计数量的商,所述目标类型的请求的超时数量是指所述目标类型的请求中,所述实际处理耗时大于所述目标类型的请求的超时阈值的请求数量;根据所述k个待处理请求各自的类型,以及每一种类型的请求的超时率,计算所述k个待处理请求的超时率的平均值。在另一种可能的实施方式中,所述目标类型的请求的历史统计数据还包括:所述目标类型的请求中的每一个请求对应的设备负荷状态,所述设备负荷状态包括正常负荷状态和高负荷状态;所述目标类型的请求的超时率包括:所述目标类型的请求在所述正常负荷状态下的超时率,和所述目标类型的请求在所述高负荷状态下的超时率。在另一种可能的实施方式中,所述根据所述n个线程中的每一个线程对应的切片时间,分别为所述n个线程中的每一个线程分配待处理请求,包括:将所述k个待处理请求划分为w个分组,其中,每一个分组中包括多个待处理请求,所述w个分组中的第j个分组中所有待处理请求的预计处理耗时的最小值,大于或者等于第j+1个分组中所有待处理请求的预计处理耗时的最大值,所述w为大于1的整数,所述j为小于w的正整数;从所述w个分组中的第1个分组开始,依次从每一个分组中取出一个待处理请求分配给第一线程,当从第u个分组中取出的一个待处理请求分配给所述第一线程之后,若所述第一线程已分配到的待处理请求的预计处理耗时的总和大于所述第一线程对应的切片时间,则将所述从第u个分组中取出的一个待处理请求撤回,并从第u+1个分组中取出一个待处理请求分配给所述第一线程,以此类推,直至从所述w个分组中的最后一个分组中取出的一个待处理请求被分配给所述第一线程或者被分配给所述第一线程之后撤回,所述u为小于w的正整数,其中,所述第一线程是所述n个线程中的任意一个线程。在另一种可能的实施方式中,所述根据所述n个线程中的每一个线程对应的切片时间,分别为所述n个线程中的每一个线程分配待处理请求之后,还包括:当所述n个线程中存在目标线程时,计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值,其中,所述目标线程是指被分配到的待处理请求中存在有概率发生超时情况的待处理请求的线程;根据所述其它线程对应的切片时间的增加值,为所述其它线程分配待处理请求。在另一种可能的实施方式中,所述计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值,包括:按照下述公式计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值δt:其中,所述m为所述n个线程中已分配到的待处理请求中有概率发生超时情况的待处理请求的个数,所述m为小于或等于k的正整数;所述δt为所述m个待处理请求中每一个待处理请求的预设缓冲值;所述timeout为所述m个待处理请求中每一个待处理请求的超时率;所述a为第一系数;所述x为所述目标线程的个数。在另一种可能的实施方式中,所述方法还包括:当所述n个线程中的第二线程处理完成为所述第二线程分配的待处理请求时,检测所述请求队列中是否还存在未被分配的待处理请求;若所述请求队列中还存在未被分配的待处理请求,则根据所述第二线程对应的切片时间,为所述第二线程分配待处理请求。根据本发明实施例的第二方面,提供一种请求分配装置,所述装置包括:获取模块,用于获取请求队列中k个待处理请求的预计处理耗时的总和,所述k为大于1的整数;计算模块,用于根据所述k个待处理请求的预计处理耗时的总和,以及用于执行所述k个待处理请求的线程数量n,计算所述n个线程中的每一个线程对应的切片时间,所述n为大于1的整数;分配模块,用于根据所述n个线程中的每一个线程对应的切片时间,分别为所述n个线程中的每一个线程分配待处理请求,其中,为所述n个线程中的第i个线程分配的待处理请求的数量为p,所述p个待处理请求的预计处理耗时的总和不大于所述第i个线程对应的切片时间,所述p为小于k的正整数,所述i为小于或等于n的正整数。在一种可能的实施方式中,所述计算模块,包括:获取单元,用于获取所述k个待处理请求的超时率的平均值,所述待处理请求的超时率是指所述待处理请求发生超时情况的概率;计算单元,用于在所述平均值等于0的情况下,将所述k个待处理请求的预计处理耗时的总和与所述线程数量n相除,得到所述切片时间;所述计算单元,还用于在所述平均值大于0的情况下,计算所述线程数量n和第一系数a的乘积,并将所述k个待处理请求的预计处理耗时的总和与所述乘积相除,得到所述切片时间,所述a大于1。在另一种可能的实施方式中,所述获取单元,包括:获取子单元,用于获取每一种类型的请求的历史统计数据,其中,目标类型的请求的历史统计数据包括:所述目标类型的请求在历史统计周期内的统计数量,以及所述目标类型的请求中的每一个请求的实际处理耗时;计算子单元,用于根据每一种类型的请求的历史统计数据和每一种类型的请求的超时阈值,分别确定每一种类型的请求的超时率,其中,所述目标类型的请求的超时率等于所述目标类型的请求的超时数量与所述统计数量的商,所述目标类型的请求的超时数量是指所述目标类型的请求中,所述实际处理耗时大于所述目标类型的请求的超时阈值的请求数量;所述计算子单元,还用于根据所述k个待处理请求各自的类型,以及每一种类型的请求的超时率,计算所述k个待处理请求的超时率的平均值。在另一种可能的实施方式中,所述目标类型的请求的历史统计数据还包括:所述目标类型的请求中的每一个请求对应的设备负荷状态,所述设备负荷状态包括正常负荷状态和高负荷状态;所述目标类型的请求的超时率包括:所述目标类型的请求在所述正常负荷状态下的超时率,和所述目标类型的请求在所述高负荷状态下的超时率。在另一种可能的实施方式中,所述分配模块,包括:划分单元,用于将所述k个待处理请求划分为w个分组,其中,每一个分组中包括多个待处理请求,所述w个分组中的第j个分组中所有待处理请求的预计处理耗时的最小值,大于或者等于第j+1个分组中所有待处理请求的预计处理耗时的最大值,所述w为大于1的整数,所述j为小于w的正整数;从所述w个分组中的第1个分组开始,依次从每一个分组中取出一个待处理请求分配给第一线程,当从第u个分组中取出的一个待处理请求分配给所述第一线程之后,若所述第一线程已分配到的待处理请求的预计处理耗时的总和大于所述第一线程对应的切片时间,则将所述从第u个分组中取出的一个待处理请求撤回,并从第u+1个分组中取出一个待处理请求分配给所述第一线程,以此类推,直至从所述w个分组中的最后一个分组中取出的一个待处理请求被分配给所述第一线程或者被分配给所述第一线程之后撤回,所述u为小于w的正整数,其中,所述第一线程是所述n个线程中的任意一个线程。在另一种可能的实施方式中,所述计算模块,还用于当所述n个线程中存在目标线程时,计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值,其中,所述目标线程是指被分配到的待处理请求中存在有概率发生超时情况的待处理请求的线程;所述分配模块,还用于根据所述其它线程对应的切片时间的增加值,为所述其它线程分配待处理请求。在另一种可能的实施方式中,所述计算模块,用于:按照下述公式计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值δt:其中,所述m为所述n个线程中已分配到的待处理请求中有概率发生超时情况的待处理请求的个数,所述m为小于或等于k的正整数;所述δt为所述m个待处理请求中每一个待处理请求的预设缓冲值;所述timeout为所述m个待处理请求中每一个待处理请求的超时率;所述a为第一系数;所述x为所述目标线程的个数。在另一种可能的实施方式中,所述装置还包括:检测模块;所述检测模块,用于当所述n个线程中的第二线程处理完成为所述第二线程分配的待处理请求时,检测所述请求队列中是否还存在未被分配的待处理请求;所述分配模块,还用于在所述请求队列中还存在未被分配的待处理请求的情况下,根据所述第二线程对应的切片时间,为所述第二线程分配待处理请求。根据本发明实施例的第三方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如第一方面所述的请求分配方法。本发明实施例提供的技术方案带来的有益效果是:通过根据请求队列中所有待处理请求的预计处理耗时之和以及用于执行待处理请求的线程数量,计算得到每个线程对应的切片时间,并将其作为为每个线程分配待处理请求时的依据,使得所有线程可以在相同或相近的时间处理完成分配到的待处理请求,避免了某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完的情况,从而减少了处理请求队列中所有待处理请求的总耗时,提高了整体处理效率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1是本发明实施例提供的请求处理方法的示意图;图2是本发明一个实施例提供的请求分配方法的流程图;图3a是本发明一个实施例提供的历史统计数据的正态分布示意图;图3b是本发明一个实施例提供的计算预计处理耗时的示意图;图4是本发明一个实施例提供的请求分配方法的另一流程图;图5是本发明另一个实施例提供的请求分配方法的流程图;图6是本发明另一个实施例提供的分配缓冲值的示意图;图7是本发明一个实施例提供的请求分配装置的框图;图8是本发明一个实施例提供的计算机设备的结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。如图1所示,其示出了本发明实施例提供的请求处理方法的示意图。首先,创建预设数量的用于执行待处理请求的线程,并根据本发明实施例提供的请求分配方法将请求队列中存在的待处理请求分配给各个线程;随后,当某一个或者某一些线程处理完成为其分配的待处理请求后,若请求队列中还存在未被分配的待处理请求,则仍然按照本发明实施例提供的请求分配方法再次将剩余的待处理请求分配给已处理完成的线程,对于未处理完成的线程,采取超时保护机制,不为其分配新的待处理请求。另外,在每一个待处理请求被执行完毕之后,将它们的执行信息上传并存储至数据库,执行信息包括每一个待处理请求在本次处理中的实际处理耗时、本次处理该请求时的设备负荷状态等等。在本发明实施例中,通过根据请求队列中所有待处理请求的预计处理耗时之和以及用于执行待处理请求的线程数量,计算得到每个线程对应的切片时间,并将其作为为每个线程分配待处理请求时的依据,使得所有线程可以在相同或相近的时间处理完成分配到的待处理请求,避免了某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完的情况,从而减少了处理请求队列中所有待处理请求的总耗时,提高了整体处理效率。本发明实施例所提供的请求分配方法,可以由一种计算机设备来完成。该计算机设备中包括cpu(centralprocessingunit,中央处理器),并且该计算机设备可以对各类服务请求设备发送的请求进行分配和处理。示例性地,该计算机设备为服务器。下面将基于上面所述的本发明实施例涉及的共性方面,对本发明实施例作进一步详细说明。请参考图2,其示出了本发明一个实施例提供的请求分配方法的流程图。如图2所示,该方法可以包括:步骤201,获取请求队列中k个待处理请求的预计处理耗时的总和。其中,k为大于1的整数。预计处理耗时是指为每个待处理请求预估的处理耗时(在本实施例中用tq表示)。将k个待处理请求中的每一个待处理请求的预计处理耗时累加,便可得到k个待处理请求的预计处理耗时的总和。示例性地,待处理请求可以是接口请求,接口是服务提供设备用于向服务请求设备提供资源和信息的通道,接口请求是指服务请求设备向服务提供设备发送的用于获取其内部资源和信息的请求。在一种可能的实施方式中,通过如下过程获取请求队列中每个待处理请求的预计处理耗时:第一,获取k个待处理请求中每一种类型的请求的历史统计数据。每个待处理请求有其对应的类型,而属于同一种类型的待处理请求,其预计处理耗时是相同的。可选地,根据待处理请求用于请求获取的资源或者信息的不同将待处理请求划分为多个类型。在本实施例中,将k个待处理请求属于的类型中的任意一种类型称为“目标类型”。对于目标类型的请求,其历史统计数据包括:目标类型的请求在历史统计周期内的统计数量,以及目标类型的请求中的每一个请求的实际处理耗时。可选地,历史统计周期为2至4周。目标类型的请求在历史统计周期内的统计数量是目标类型的请求在历史统计周期内被执行处理的总个数;目标类型的请求中的每一个请求的实际处理耗时是每一个目标类型的请求在历史统计周期内被执行处理的实际耗时。第二,建立直角坐标系,并将目标类型的请求的历史统计数据展现在直角坐标系中。该直角坐标系的横轴对应每一个目标类型的请求的实际处理耗时,该直角坐标系的竖轴对应相同实际处理耗时的目标类型的请求的数量。先将目标类型的请求的历史统计数据以散列点的形式展现在已构建好的直角坐标系中,根据散列点的分布情况可绘出如图3a所示的正态分布曲线。第三,根据目标类型的请求的历史统计数据,计算得到目标类型的请求的预计处理耗时。如图3b所示,剔除直角坐标系中前5%数量的散列点和后5%数量的散列点,根据剩余90%数量的散列点对应的历史统计数据,计算这90%数量的散列点的实际处理耗时的平均值,将其作为目标类型的请求的预计处理耗时。通过上述方式,可获得k个待处理请求中每一个待处理请求的预计处理耗时。示例性地,可参见表1,其示出了k个待处理请求的预计处理耗时的一种可能情况。表1待处理请求预计处理耗时(s)第1个0.25第2个0.29第3个0.35第4个0.20······第k个0.29步骤202,根据k个待处理请求的预计处理耗时的总和,以及用于执行k个待处理请求的线程数量n,计算n个线程中的每一个线程对应的切片时间。其中,n为大于1的整数。线程是被系统独立调度和分派的最小程序执行单元,在本实施例中用于执行请求队列中的待处理请求。切片时间为单个线程执行单次请求处理任务的预计最大耗时,也是下文中为每个线程分配待处理请求的依据。在一种可能的实施方式中,本步骤具体包括:第一,获取k个待处理请求的超时率的平均值。待处理请求的超时率(在本实施例中用timeout表示)是指待处理请求发生超时情况的概率,对于属于同一种类型的待处理请求,其超时率相同。具体地,根据每一种类型的请求的历史统计数据和每一种类型的请求的超时阈值,可分别确定每一种类型的请求的超时率,其中,目标类型的请求的超时率等于目标类型的请求的超时数量与统计数量的商,目标类型的请求的超时数量是指目标类型的请求中,实际处理耗时大于目标类型的请求的超时阈值的请求数量。在本实施例中,目标类型的请求的超时阈值可以为上述目标类型的请求中90%散列点对应的最长实际运行耗时和第二系数b的乘积,也可以为目标类型的请求的预计处理耗时和第三系数c的乘积,通常情况下c大于b,本实施例对此并不做限定。示例性地,目标类型的请求在历史统计周期内的统计数量为100,这100个请求中有3个请求的实际处理耗时大于目标类型的请求的超时阈值,则目标类型的请求的超时率为3%。随后,根据k个待处理请求各自的类型,以及每一种类型的请求的超时率,计算k个待处理请求的超时率的平均值timeout。具体参见下式:第二,若平均值等于0,说明请求队列中不存在有概率发生超时情况的待处理请求,可将待处理请求平均分配给各个线程,也即将k个待处理请求的预计处理耗时的总和与线程数量n相除,得到切片时间assigntime。具体参见下式:第三,若平均值大于0,说明请求队列中存在有概率发生超时情况的待处理请求,为了避免同一线程被分配到较多有概率发生超时情况的待处理请求,需要缩短每个线程对应的切片时间,因此,先计算线程数量n和第一系数a的乘积,再将k个待处理请求的预计处理耗时的总和与乘积相除,得到切片时间assigntime。具体参见下式:通常情况下,a大于1,且a与上述k个待处理请求的超时率的平均值成正相关关系。具体可参见表2,其示出了第一系数a和k个待处理请求的超时率的平均值之间的关系的一种可能情况。表2超时率的平均值第一系数a0.01%-5%25-10%310-20%4可选地,在计算切片时间之前,确定设备负荷状态,并根据设备负荷状态来计算每个线程对应的切片时间。其中,设备负荷状态包括正常负荷状态和高负荷状态。可选地,通过程序命令“15loadaverage”获取设备在预设周期内的平均负载率,若平均负载率小于等于设备中各个cpu的核数的总和,则设备处于正常负荷状态,反之,则设备处于高负荷状态。对于不同的设备负荷状态,在计算切片时间时所选取的每个待处理请求的超时率也不相同,因此,每一种类型的请求的历史统计数据(例如目标类型的请求的历史统计数据)还包括:各个类型的请求中每一个请求对应的设备负荷状态。根据这些设备负荷状态可以分别计算出每一种类型的请求在正常负荷状态下的超时率,和在高负荷状态下的超时率,由此得到在正常负荷状态下的切片时间和在高负荷状态下的切片时间。步骤203,根据n个线程中的每一个线程对应的切片时间,分别为n个线程中的每一个线程分配待处理请求。由上文针对步骤202中得到的切片时间的介绍可知,在步骤202中计算得到的每个线程对应的切片时间是相同的。在一种可能的实施方式中,本步骤具体包括:将k个待处理请求划分为w个分组,其中,每一个分组中包括多个待处理请求,w为大于1的整数,w个分组中的第j个分组中所有待处理请求的预计处理耗时的最小值,大于或者等于第j+1个分组中所有待处理请求的预计处理耗时的最大值,j为小于w的正整数。在一种可能的分组方式中,将k个待处理请求中预计处理耗时相同的待处理请求划分为一个分组。可选地,为了便于分组,先将k个待处理请求按照其预计处理耗时由大到小的顺序在请求队列中排列,再将排列后的k个待处理请求划分为w个分组。在本实施例中,将n个线程中的任意一个线程称为“第一线程”。在给第一线程分配待处理请求的过程中,从w个分组中的第1个分组开始,依次从每一个分组中取出一个待处理请求,将其分配给第一线程,当从第u个分组中取出的一个待处理请求分配给第一线程之后,若第一线程中已分配到的待处理请求的预计处理耗时的总和大于第一线程对应的切片时间时,则将从第u个分组中取出的一个待处理请求撤回,并从第u+1个分组中取出一个待处理请求分配给所述第一线程,以此类推,直至从w个分组中的最后一个分组中取出的一个待处理请求被分配给第一线程或者被分配给第一线程之后撤回,其中,u为小于w的正整数。示例性地,已经为第一线程分配的待处理请求的数量为p,且p个待处理请求的预计处理耗时的总和不大于第一线程对应的切片时间,当为第一线程分配第p+1个待处理请求时,若这p+1个待处理请求的预计处理耗时的总和大于第一线程对应的切片时间,则不将该待处理请求分配给第一线程,而从该待处理请求属于的分组的下一个分组中取出一个待处理请求,将其分配给第一线程,以此类推,直至将第w个分组中的待处理请求分配给第一线程时,第一线程中分配到的待处理请求的预计处理耗时的总和仍然大于第一线程对应的切片时间,此时表明第一线程分配完毕,第一线程所需执行的待处理请求为在第w个分组中的待处理请求分配之前已分配到的所有待处理请求。可选地,若在将第w个分组中的待处理请求分配给第一线程之后,第一线程中分配到的待处理请求的预计处理耗时的总和仍然小于第一线程对应的切片时间,则重复上述从第1个分组开始,从每一个分组中取出一个待处理请求,将其分配给第一线程的步骤。p为小于k的正整数。对于n个线程中的每一个线程,都按照上述介绍的为第一线程分配待处理请求的方式进行分配。需要补充说明的一点是,当n个线程中的第二线程处理完成为第二线程分配的待处理请求时,设备会检测请求队列中是否还存在未被分配的待处理请求,第二线程为n个线程中任意一个线程。若请求队列中还存在未被分配的待处理请求,则根据第二线程对应的切片时间,继续为第二线程分配待处理请求。如图4所示,其示例性示出了本发明一个实施例提供的请求分配方法的另一流程图。首先,创建n个用于执行待处理请求的线程,并获取请求队列中待处理请求的数量;其次,将请求队列中的待处理请求划分为多个分组,只要检测到请求队列中还存在未被分配的待处理请求,就按照空余线程对应的切片时间为其分配待处理请求;随后,当n个线程中的某一个线程执行完毕分配到的待处理请求之后,重新检测请求队列中是否还存在未被分配的待处理请求,若存在,则继续为该线程分配待处理请求;若请求队列中不存在未被分配的待处理请求,则等待其它线程处理完成。综上所述,本发明实施例提供的方法,通过根据请求队列中所有待处理请求的预计处理耗时之和以及用于执行待处理请求的线程数量,计算得到每个线程对应的切片时间,并将其作为为每个线程分配待处理请求时的依据,使得所有线程可以在相同或相近的时间处理完成分配到的待处理请求,避免了某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完的情况,从而减少了处理请求队列中所有待处理请求的总耗时,提高了整体处理效率。请参考图5,其示出了本发明另一个实施例提供的请求分配方法的流程图。如图5所示,该方法可以包括:步骤501,获取请求队列中k个待处理请求的预计处理耗时的总和。其中,k为大于1的整数。步骤502,根据k个待处理请求的预计处理耗时的总和,以及用于执行k个待处理请求的线程数量n,计算n个线程中的每一个线程对应的切片时间。其中,n为大于1的整数。步骤503,根据n个线程中的每一个线程对应的切片时间,分别为n个线程中的每一个线程分配待处理请求。步骤504,当n个线程中存在目标线程时,计算n个线程中除目标线程以外的其它线程对应的切片时间的增加值。目标线程是指被分配到的待处理请求中存在有概率发生超时情况的待处理请求的线程,有概率发生超时情况的待处理请求为超时率大于超时率阈值的待处理请求。通常情况下,超时率阈值为5%。可选地,按照下述公式计算n个线程中除目标线程以外的其它线程对应的切片时间的增加值δt:其中,m为n个线程中已分配到的待处理请求中有概率发生超时情况的待处理请求的个数,m为小于或等于k的正整数;δt为m个待处理请求中每一个待处理请求的预设缓冲值;timeout为m个待处理请求中每一个待处理请求的超时率;a为第一系数;x为目标线程的个数。δt可以为开发人员预先设置并存储在设备中的值,也可以为根据某个算法计算得到的值。可选地,当δt为根据某个算法计算得到的值时,δt为m个待处理请求中每一个待处理请求的超时阈值和每一个待处理请求中90%数量的散列点对应的最长实际运行耗时之差。步骤505,根据其它线程对应的切片时间的增加值,为其它线程分配待处理请求。在为其它线程中的任意一个线程分配待处理请求的过程中,仍然从w个分组中的第1个分组开始,从每一个分组中取出一个待处理请求,将其分配给该线程,直至该线程中已分配到的待处理请求的预计处理耗时的总和大于该线程对应的切片时间和切片时间的增加值之和,此时停止向该线程分配待处理请求,并将最后一个分配给该线程的待处理请求撤回。具体分配过程可参见上述实施例中的步骤203。若其它线程中存在线程被分配到有概率发生超时情况的待处理请求,则再次从步骤504开始执行,为n个线程中除被分配到有概率发生超时情况的待处理请求的线程以外的其它所有线程(包括目标线程),计算本次对应的切片时间的增加值。步骤506,当n个线程中的第二线程处理完成为第二线程分配的待处理请求时,检测请求队列中是否还存在未被分配的待处理请求。第二线程为n个线程中任意一个线程。若请求队列中还存在未被分配的待处理请求,则执行步骤507;若请求队列中不存在未被分配的待处理请求,则执行步骤等待其它线程处理完成。步骤507,根据第二线程对应的切片时间,为第二线程分配待处理请求。第二线程对应的切片时间为无增加值的切片时间。需要补充说明的一点是,若在本步骤中第二线程被分配到有概率发生超时情况的待处理请求,则再次从步骤504开始执行,计算n个线程中除第二线程以外的其它线程对应的切片时间的增加值。对于图5实施例中未披露的细节,请参见上述图2实施例。综上所述,本发明实施例提供的方法,通过根据请求队列中所有待处理请求的预计处理耗时之和以及用于执行待处理请求的线程数量,计算得到每个线程对应的切片时间,并将其作为为每个线程分配待处理请求时的依据,使得所有线程可以在相同或相近的时间处理完成分配到的待处理请求,避免了某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完的情况,从而减少了处理请求队列中所有待处理请求的总耗时,提高了整体处理效率。另外,通过为除目标线程以外的其它线程分配其对应的切片时间的增加值,进一步确保了所有线程可以在同一时间处理完成分配到的待处理请求。下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。请参考图7,其示出了本发明一个实施例提供的请求分配装置的框图。该装置具有实现上述方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以包括:获取模块710、计算模块720和分配模块730。获取模块710,用于获取请求队列中k个待处理请求的预计处理耗时的总和,所述k为大于1的整数;计算模块720,用于根据所述k个待处理请求的预计处理耗时的总和,以及用于执行所述k个待处理请求的线程数量n,计算所述n个线程中的每一个线程对应的切片时间,所述n为大于1的整数;分配模块730,用于根据所述n个线程中的每一个线程对应的切片时间,分别为所述n个线程中的每一个线程分配待处理请求,其中,为所述n个线程中的第i个线程分配的待处理请求的数量为p,所述p个待处理请求的预计处理耗时的总和不大于所述第i个线程对应的切片时间,所述p为小于k的正整数,所述i为小于或等于n的正整数。综上所述,本发明实施例提供的装置,通过根据请求队列中所有待处理请求的预计处理耗时之和以及用于执行待处理请求的线程数量,计算得到每个线程对应的切片时间,并将其作为为每个线程分配待处理请求时的依据,使得所有线程可以在相同或相近的时间处理完成分配到的待处理请求,避免了某些线程因被分配到耗时较长的待处理请求而相较于其它线程延后较长时间处理完的情况,从而减少了处理请求队列中所有待处理请求的总耗时,提高了整体处理效率。在基于图7实施例提供的一个可选实施例中,所述计算模块720,包括:获取单元,用于获取所述k个待处理请求的超时率的平均值,所述待处理请求的超时率是指所述待处理请求发生超时情况的概率;计算单元,用于在所述平均值等于0的情况下,将所述k个待处理请求的预计处理耗时的总和与所述线程数量n相除,得到所述切片时间;所述计算单元,还用于在所述平均值大于0的情况下,计算所述线程数量n和第一系数a的乘积,并将所述k个待处理请求的预计处理耗时的总和与所述乘积相除,得到所述切片时间,所述a大于1。在基于图7实施例提供的另一个可选实施例中,所述获取单元,包括:获取子单元,用于获取每一种类型的请求的历史统计数据,其中,目标类型的请求的历史统计数据包括:所述目标类型的请求在历史统计周期内的统计数量,以及所述目标类型的请求中的每一个请求的实际处理耗时;计算子单元,用于根据每一种类型的请求的历史统计数据和每一种类型的请求的超时阈值,分别确定每一种类型的请求的超时率,其中,所述目标类型的请求的超时率等于所述目标类型的请求的超时数量与所述统计数量的商,所述目标类型的请求的超时数量是指所述目标类型的请求中,所述实际处理耗时大于所述目标类型的请求的超时阈值的请求数量;所述计算子单元,还用于根据所述k个待处理请求各自的类型,以及每一种类型的请求的超时率,计算所述k个待处理请求的超时率的平均值。在基于图7实施例提供的另一个可选实施例中,所述目标类型的请求的历史统计数据还包括:所述目标类型的请求中的每一个请求对应的设备负荷状态,所述设备负荷状态包括正常负荷状态和高负荷状态;所述目标类型的请求的超时率包括:所述目标类型的请求在所述正常负荷状态下的超时率,和所述目标类型的请求在所述高负荷状态下的超时率。在基于图7实施例提供的另一个可选实施例中,所述分配模块730,包括:划分单元,用于将所述k个待处理请求划分为w个分组,其中,每一个分组中包括多个待处理请求,所述w个分组中的第j个分组中所有待处理请求的预计处理耗时的最小值,大于或者等于第j+1个分组中所有待处理请求的预计处理耗时的最大值,所述w为大于1的整数,所述j为小于w的正整数;从所述w个分组中的第1个分组开始,依次从每一个分组中取出一个待处理请求分配给第一线程,当从第u个分组中取出的一个待处理请求分配给所述第一线程之后,若所述第一线程已分配到的待处理请求的预计处理耗时的总和大于所述第一线程对应的切片时间,则将所述从第u个分组中取出的一个待处理请求撤回,并从第u+1个分组中取出一个待处理请求分配给所述第一线程,以此类推,直至从所述w个分组中的最后一个分组中取出的一个待处理请求被分配给所述第一线程或者被分配给所述第一线程之后撤回,所述u为小于w的正整数,其中,所述第一线程是所述n个线程中的任意一个线程。在基于图7实施例提供的另一个可选实施例中,所述计算模块720,还用于当所述n个线程中存在目标线程时,计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值,其中,所述目标线程是指被分配到的待处理请求中存在有概率发生超时情况的待处理请求的线程;所述分配模块730,还用于根据所述其它线程对应的切片时间的增加值,为所述其它线程分配待处理请求。在基于图7实施例提供的另一个可选实施例中,所述计算模块720,用于:按照下述公式计算所述n个线程中除所述目标线程以外的其它线程对应的切片时间的增加值δt:其中,所述m为所述n个线程中已分配到的待处理请求中有概率发生超时情况的待处理请求的个数,所述m为小于或等于k的正整数;所述δt为所述m个待处理请求中每一个待处理请求的预设缓冲值;所述timeout为所述m个待处理请求中每一个待处理请求的超时率;所述a为第一系数;所述x为所述目标线程的个数。在基于图7实施例提供的另一个可选实施例中,所述装置还包括:检测模块(未示出);所述检测模块,用于当所述n个线程中的第二线程处理完成为所述第二线程分配的待处理请求时,检测所述请求队列中是否还存在未被分配的待处理请求;所述分配模块730,还用于在所述请求队列中还存在未被分配的待处理请求的情况下,根据所述第二线程对应的切片时间,为所述第二线程分配待处理请求。需要说明的是:上述实施例提供的请求分配装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将服务器的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的请求分配装置和请求分配方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。请参考图8,其示出了本发明一个实施例提供的计算机设备的结构示意图。该计算机设备用于实施上述实施例中提供的请求分配方法。具体来讲:所述计算机设备800包括中央处理单元(cpu)801、包括随机存取存储器(ram)802和只读存储器(rom)803的系统存储器804,以及连接系统存储器804和中央处理单元801的系统总线805。所述计算机设备800还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(i/o系统)806,和用于存储操作系统813、应用程序814和其它程序模块815的大容量存储设备807。所述基本输入/输出系统806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中所述显示器808和输入设备809都通过连接到系统总线805的输入输出控制器810连接到中央处理单元801。所述基本输入/输出系统806还可以包括输入输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其它设备的输入。类似地,输入输出控制器810还提供输出到显示屏、打印机或其它类型的输出设备。所述大容量存储设备807通过连接到系统总线805的大容量存储控制器(未示出)连接到中央处理单元801。所述大容量存储设备807及其相关联的计算机可读介质为计算机设备800提供非易失性存储。也就是说,所述大容量存储设备807可以包括诸如硬盘或者cd-rom驱动器之类的计算机可读介质(未示出)。不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、rom、eprom、eeprom、闪存或其它固态存储其技术,cd-rom、dvd或其它光学存储、磁带盒、磁带、磁盘存储或其它磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器804和大容量存储设备807可以统称为存储器。所述存储器还包括至少一条指令、至少一段程序、代码集或指令集,其中所述至少一条指令、至少一段程序、代码集或指令集存储于存储器中,且经配置以由一个或者一个以上处理器执行,以实现上述请求分配方法。根据本发明的各种实施例,所述计算机设备800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备800可以通过连接在所述系统总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其它类型的网络或远程计算机系统(未示出)。在示例性实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由电子设备的处理器加载并执行以实现上述请求分配方法。可选地,上述计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。在示例性实施例中,还提供了一种计算机程序产品,当该计算机程序产品被执行时,其用于实现上述请求分配方法。应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本文中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1