请求处理方法、装置、电子设备及计算机可读存储介质与流程

文档序号:20917104发布日期:2020-05-29 13:40阅读:188来源:国知局
请求处理方法、装置、电子设备及计算机可读存储介质与流程

本申请涉及数据处理技术领域,具体而言,涉及一种请求处理方法、装置、电子设备及计算机可读存储介质。



背景技术:

随着海量数据的出现,人们倾向于使用机器学习技术来从数据中挖掘出价值。机器学习能够通过模拟或实现人类的学习行为,获取新的知识或技能,重新组织已有的知识结构而不断改善系统自身的性能,其为人工智能研究发展到一定阶段的必然产物,应用遍及人工智能的各个领域。

由于机器学习的使用离不开必要的机器学习框架,因此,机器学习的爆炸性增长也推动了许多开源工具的发展,使得开发人员更容易学习其技术。例如,关于机器学习研究的深度学习领域中,谷歌公司所推出的张量流服务(tensorflowserving)为目前性能较为优异的典型机器学习框架之一。为了提升数据处理性能,现有的机器学习框架中使用了多线程技术来对多个并发请求进行处理,即机器学习框架中开启批处理策略、处理一批并发请求时,基于多个线程同时对一批请求进行处理。

但是,上述现有机器学习框架中通过多线程技术对多个并发请求进行处理时,一批请求会同时占用多个线程,而不同线程之间存在跨核调度和跨线程竞争,消耗了服务器的大量资源,从而导致服务器的计算性能无法充分发挥。



技术实现要素:

有鉴于此,本申请实施例的目的在于提供一种请求处理方法、装置、电子设备及计算机可读存储介质,能够在进行请求处理时,减少由于跨线程竞争所带来的服务器资源消耗,从而更好地发挥服务器的计算性能。

第一方面,本申请实施例提供一种请求处理方法,包括:

获取n个请求,其中,每个请求分别对应线程上的一个协程,一个所述线程包含一个或多个所述协程,n为大于0的整数、且小于或等于预设阈值;根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程;通过主导协程合并n个请求,获取合并请求数据;向计算设备提交合并请求数据。

可选地,根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程,包括:

根据n个请求写入队列的顺序,确定队列中第一个请求对应的协程为主导协程、其他请求对应的协程均为跟随协程。

可选地,向计算设备提交合并请求数据之后,还包括:

接收计算设备返回的计算结果;拆分计算结果,获取每个请求对应的响应结果。

可选地,主导协程为运行状态、跟随协程为等待状态;拆分计算结果,获取每个请求对应的响应结果之后,还包括:

通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果,包括:

根据n个请求写入队列的顺序,通过主导协程依次唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果,包括:

确定每个线程中跟随协程的唤醒顺序,根据唤醒顺序通过主导协程唤醒其他跟随协程,并向其他跟随协程反馈对应的响应结果。

可选地,获取n个请求,包括:

若当前未处理的请求个数大于或等于预设阈值,获取预设阈值个请求;或者,若当前未处理的请求个数小于预设阈值,则获取所有当前未处理的请求。

可选地,主导协程为获取到锁的协程;向计算设备提交合并请求数据之前,还包括:

通过主导协程释放锁。

可选地,拆分计算结果,获取每个请求对应的响应结果之后,还包括:

通过主导协程获取锁。

可选地,计算设备为机器学习处理器mlu。

第二方面,本申请实施例还提供一种请求处理装置,包括:获取模块、第一处理模块、合并模块和提交模块。

获取模块,用于获取n个请求,其中,每个请求分别对应线程上的一个协程,一个线程包含一个或多个协程,n为大于0的整数、且小于或等于预设阈值;第一处理模块,用于根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程;合并模块,用于通过主导协程合并n个请求,获取合并请求数据;提交模块,用于向计算设备提交合并请求数据。

可选地,第一处理模块,具体用于根据n个请求写入队列的顺序,确定队列中第一个请求对应的协程为主导协程、其他请求对应的协程均为跟随协程。

可选地,该装置还包括:接收模块和第二处理模块;接收模块,用于接收计算设备返回的计算结果;第二处理模块,用于拆分计算结果,获取每个请求对应的响应结果。

可选地,主导协程为运行状态、跟随协程为等待状态;第二处理模块,还用于在拆分计算结果,获取每个请求对应的响应结果之后,通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,第二处理模块,具体用于根据n个请求写入队列的顺序,通过主导协程依次唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,第二处理模块,具体用于确定每个线程中跟随协程的唤醒顺序,根据唤醒顺序通过主导协程唤醒其他跟随协程,并向其他跟随协程反馈对应的响应结果。

可选地,获取模块,具体用于若当前未处理的请求个数大于或等于预设阈值,则获取预设阈值个请求;或者,若当前未处理的请求个数小于预设阈值,则获取所有当前未处理的请求。

可选地,主导协程为获取到锁的协程;第一处理模块,还用于在提交模块向计算设备提交合并请求数据之前,通过主导协程释放锁。

可选地,第二处理模块,还用于在拆分计算结果,获取每个请求对应的响应结果之后,通过主导协程获取锁。

可选地,计算设备为机器学习处理器mlu。

第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储介质和总线。

存储介质存储有处理器可执行的机器可读指令,当电子设备运行时,处理器与存储介质之间通过总线通信,处理器执行机器可读指令,以执行时执行如上述第一方面提供的请求处理方法的步骤。

第四方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述第一方面提供的请求处理方法的步骤。

基于上述任一方面,本申请的有益效果是:

本申请实施例中,在对多个请求进行处理时,每次从未处理的请求中获取n个请求,通过引入协程作为执行单元,将所获取的n个请求分别对应到每个协程,并根据预设竞争规则,在n个请求所对应的n个协程中确定一个主导协程,通过该主导协程合并n个请求,将得到的合并请求数据提交到计算设备进行计算,避免了多个线程之间的竞争,减少了由于跨线程竞争所带来的服务器资源消耗,从而能够更好地发挥服务器的计算性能。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的请求处理方法的一流程示意图;

图2为本申请实施例提供的请求处理方法的另一流程示意图;

图3为本申请实施例提供的请求处理方法的另一流程示意图;

图4为本申请实施例提供的请求处理方法的另一流程示意图;

图5为本申请实施例提供的请求处理装置的一结构示意图;

图6为本申请实施例提供的请求处理装置的另一结构示意图;

图7为本申请实施例提供的电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。

另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

为使本申请下述实施例中的内容更容易理解,在此对部分必要的名词作出解释如下:

线程:有时被称为轻量进程,是程序执行流的最小单元。一个标准的线程由线程标识(identification,id)、当前指令指针、寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派中央处理器(centralprocessingunit,cpu)的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

协程概念:协程是指在操作系统线程的基础上实现的用户态执行单元,可以包括对称式协程(stackful协程)和非对称式协程(stackless协程)。

协程切换原理:以stackful协程为例,stackful协程设计上每个协程拥有自己的栈,通过切换指令指针(instructionpointer,ip)寄存器和堆栈指针(stackpointer,sp)寄存器实现在不同协程的运行栈空间和代码段切换。切换时首先将原协程所有寄存器保存到堆中指定位置,然后将目标协程的寄存器恢复。每个物理线程同一时间只能执行一个协程,当协程退出或遇到堵塞操作挂起的时候,调度引擎会将当前协程切换到其他处于可执行状态的协程,否则处于等待唤醒状态中。

本申请实施例以一对外提供数据处理的服务器为例,借以说明本申请所提供的请求处理方法的具体应用以及有益效果。当服务器接收到用户输入的多个请求时,服务器根据该请求处理方法对多个请求进行处理,进而向用户返回处理结果。当然,本申请实施例的执行主体还可以是其他具有请求处理功能的设备,在此不做限制。

可选地,在本申请一种实施方式中,服务器与用户端基于i/o(input/output,输入输出)框架实现,用户能够基于i/o框架向服务器输入请求数据,如:文字、音频、视频、图像等,服务器对用户输入的请求数据,可按照下述请求处理方法的步骤对其进行批处理,并向用户返回处理结果。

如图1所示,本申请实施例所提供的请求处理方法,包括如下步骤:

s101、获取n个请求。

其中,每个请求分别对应线程上的一个协程,一个所述线程包含一个或多个所述协程,n为大于0的整数、且小于或等于预设阈值。

当用户向服务器输入多个请求时,服务器能够按照该请求处理方法,以协程作为执行单元,对多个请求进行批处理。

首先,服务器从接收到的多个请求中获取n个请求,所获取的n个请求分别对应到线程上的一个协程。可选地,服务器内具有多个线程,每个线程内可包括一个或多个协程,所获取的n个请求可分别对应到不同线程内的协程。

另外,预设阈值可以指服务器内所有线程内一次可处理协程的总数,其具体数值可根据服务器的不同类型进行配置。例如,当服务器使用四核四线程的处理器时,可以将预设阈值设置为2、4、6或8中的任一数值;或者,当服务器使用四核八线程的处理器时,也可以将n设为2、4、6、8或者16等更大的数值,对预设阈值的设置方法可以有多种,本申请在此不做限定。

如上所述,本申请实施例提供的该请求处理方法中,服务器在对用户输入的请求进行批处理时,可以根据预设阈值以及未处理的请求数量确定所获取的请求个数,以实现每次处理请求数量的自适应,无需服务器做其他工作或调整。

在一种实施方式中,上述协程可以为对称式协程,即每个协程所执行的功能相同。相比于其他协程,对称式协程拥有自己独立的栈,切换时不需要将栈上对象序列化到堆或其他位置,可直接通过切换寄存器完成切换操作,故有更好的切换性能,也方便诊断工具进行爬栈。例如,本实施方式中可采用stackful对称式协程。

在另外一种实施方式中,上述协程也可以为非对称式协程,即每个协程所执行的功能可不相同,本申请在此亦不做特别限定。

可选地,在一些实施方式中,服务器可以通过输入输出(input/output,i/o)框架实现获取请求。其中,i/o框架能够接收外部输入的请求数据,例如,请求数据可以包括图形数据、文字数据、音频数据等不同类型的数据。i/o框架接收到外部输入的请求数据后,将请求数据作为请求,等待获取。

s102、根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程。

可选地,预设竞争规则可预先配置到服务器中,作为服务器确定主导协程(leader)和跟随协程(follower)的依据。当服务器获取到n个请求后,可照预设竞争规则,从n个请求所对应的n个协程中确定得到一个主导协程,其余n-1个协程将为跟随协程。

s103、通过主导协程合并n个请求,获取合并请求数据。

具体地,当服务器确定得到一个主导协程后,通过该主导协程将所获取的n个请求进行合并,得到合并请求数据。其中,合并请求数据中包括n个请求的全部数据信息。

可选地,主导协程处于运行(running)状态,而其他跟随协程处于等待(wait)状态。

s104、向计算设备提交合并请求数据。

当服务器将n个请求合并得到合并请求数据后,可将得到的合并请求数据提交给计算设备,计算设备可以对接收到的合并请求数据进行计算,得到计算结果,并将计算结果返回。

可选地,上述计算设备可以是中央处理器(centralprocessingunit,cpu)、图形处理器(graphicsprocessingunit,gpu)、或机器学习处理器(machinelearningunit,mlu)等。

由上所述,本申请实施例提供的请求处理方法中,在对多个请求进行处理时,每次从未处理的请求中获取n个请求,通过引入协程作为执行单元,将所获取的n个请求分别对应到每个协程,并根据预设竞争规则,在n个请求所对应的n个协程中确定一个主导协程,通过该主导协程合并n个请求,将合并请求数据提交到计算设备进行计算,避免了多个线程之间的竞争,减少了由于跨线程竞争所带来的服务器资源消耗,从而能够更好地发挥服务器的计算性能。

可选地,上述获取n个请求,具体可以是:若当前未处理的请求个数大于或等于预设阈值,则获取预设阈值个请求;或者,若当前未处理的请求个数小于预设阈值,则获取所有当前未处理的请求。

例如,当未处理的请求个数大于或等于预设阈值时,服务器能够一次获取到预设阈值个请求进行合并,即n等于预设阈值,剩余未处理的请求可以在后续批处理过程中进行处理。而当未处理的请求个数小于预设阈值时,服务器可以一次获取到未处理的全部请求个数进行合并,即n等于未处理的全部请求个数。

可选地,在一种实施方式中,上述根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程,包括:

根据n个请求写入队列的顺序,确定队列中第一个请求对应的协程为主导协程、其他请求对应的协程均为跟随协程。

需要说明的是,在本实施方式中,服务器获取到n个请求后,n个请求会按顺序写入队列。该预设竞争规则可以是:服务器根据所获取的n个请求写入队列的顺序,确定某个序列的协程为主导协程。例如,可确定队列中的第一个请求所对应的协程为主导协程,而其他请求对应的协程则为跟随协程。

在上述实施方式中,由于服务器可根据n个请求写入队列的顺序确定主导协程与跟随协程,因此在确定主导协程时,所有协程之间竞争较少,从而能够减少由于协程竞争所占用的服务器资源,进一步使得服务器的计算性能得到更好地发挥,减少在服务器在处理器请求时的响应时间。

如图2所示,本申请实施例提供的请求处理方法,在向计算设备提交合并请求数据之后,还可以包括:

s201、接收计算设备返回的计算结果。

可选地,计算设备可对服务器提交的合并请求数据进行计算,得到计算结果,并将得到的计算结果进行返回,服务器能够接收到计算设备返回的计算结果。

s202、拆分计算结果,获取每个请求对应的响应结果。

可选地,上述计算结果可以是n个请求对应响应结果的集合,服务器在接收到计算设备返回的计算结果后,可对计算结果进行拆分,进而得到每个请求所对应的响应结果。

例如,服务器可参考n个请求的合并请求数据,对计算结果进行拆分,得到每个请求一一对应的响应结果。

如上所述,本申请实施例提供的该请求处理方法中,通过主导协程将n个请求合并得到合并请求数据进行提交,其中,主导协程处于运行状态,而其他跟随协程处于等待状态。那么,在反馈响应结果的过程中,需要唤醒对应的协程来反馈响应结果。

可选地,本申请实施例提供的请求处理方法,在拆分计算结果,获取每个请求对应的响应结果之后,还可以包括:

通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。其中,服务器将计算结果进行拆分得到每个请求对应的响应结果之后,通过主导协程唤醒每个请求对应的跟随协程,使每个请求对应的跟随协程由等待状态转变为运行状态,并且向所唤醒的跟随协程反馈拆分得到的每个请求对应的响应结果。

可选地,在一种实施方式中,上述通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果,可以包括:

根据n个请求写入队列的顺序,通过主导协程依次唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

在本实施方式中,由于主导协程是根据n个请求写入队列的顺序依次唤醒每个请求对应的跟随协程,唤醒的对象是协程而不是线程,且位于主导协程所在线程内的协程之间以及其他线程内的协程之间,可以不竞争,从而也可以减少在唤醒过程中由于竞争所带来的服务器资源消耗问题,同样能够更进一步地使服务器的计算性能得到更好地发挥。

举例说明,假设服务器接收到用户输入的请求为8个,预设阈值为6,即每次最多获取6个请求作为一批进行处理,那么每次有6个请求可以被写入队列进行处理。6个请求分别对应到6个协程(w1,w2,w3,w4,w5和w6)中,并假设6个请求写入队列的顺序依次为w1,w2,w3,w4,w5和w6,那么本实施方式中,就按照w1,w2,w3,w4,w5、w6的顺序依次唤醒对应的协程并反馈响应结果。

可选地,在另一种实施方式中,上述通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果,也可以包括:

确定每个线程中跟随协程的唤醒顺序,根据唤醒顺序通过主导协程唤醒其他跟随协程,并向其他跟随协程反馈对应的响应结果。

在本实施方式中,服务器先确定每个线程中跟随协程的唤醒顺序,然后根据所确定的唤醒顺序通过主导协程唤醒其他跟随协程。例如,服务器内可预先设置其他跟随协程的优先级,当服务器通过主导协程唤醒其他跟随协程时,可参照预先设置的其他跟随协程的优先级来确定唤醒顺序,从而根据唤醒顺序依次唤醒。或者,还可以通过让其他跟随协程进行竞争的方法来实现确定唤醒顺序等,本申请不作限制。

举例说明,以上述w1、w2、w3、w4、w5和w6协程为例,假设w1、w2、w3属于第一线程,w4、w5、w6属于第二线程,w1为主导协程,从第一线程开始,先确定w2、w3的唤醒顺序,例如可以以写入队列的顺序确定每个线程中跟随协程的唤醒顺序,即先唤醒w2再唤醒w3。类似地,再确定第二线程中w4、w5、w6的唤醒顺序,假设也根据写入队列的顺序确定唤醒顺序为w4、w5、w6,那么唤醒w3之后再依次唤醒w4、w5、w6。当然,确定每个线程中跟随协程的唤醒顺序时,也可以根据一些预设的竞争规则确定,本申请实施例中不作限制。

可选地,本申请提供的请求处理方法中,主导协程可以为获取到锁的协程;在向计算设备提交合并请求数据之前,还可以包括:

通过主导协程释放锁。

需要说明的是,锁是一种用于多线程编程中,防止两个线程同时对同一公共资源(如:全局变量)进行读写的机制。

当主导协程为获取到锁后,通过主导协程将所获取的n个请求进行合并,得到合并请求数据的过程中,主导协程所获取的锁能够对上述n个请求的数据起到保护作用,防止其他请求数据对合并过程造成影响,避免请求数据冲突。

相应地,在向计算设备提交合并请求数据之前,服务器可通过主导协程将所获取的锁释放,并将合并请求数据提交给计算设备。当通过主导协程释放锁后,其他未处理的请求对应的协程可以竞争获取上述锁。

可选地,本申请提供的请求处理方法,在拆分计算结果,获取每个请求对应的响应结果之后,还可以包括:

通过主导协程获取锁。

如上所述,在获取到每个请求对应的响应结果之后,可先通过主导协程再次获取上述锁,然后再通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

其中,主导协程再次获取上述锁后,可以使得通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果的过程中,锁可以避免所需要的资源被其他线程占用,在此不再赘述。

请参照图3和图4,本申请在此以机器学习框架为例对前述方法实施例中所述的请求处理方法进行详细说明。假设服务器包括第一线程和第二线程。其中,第一线程包括:第一协程w1、第二协程w2和第三协程w3;第二线程包括:第四协程w4、第五协程w5和第六协程w6。该请求处理方法中,服务器以前述6个协程作为执行单元对用户输入的多个请求进行处理,即假设前述方法实施例中所述的预设阈值等于6。

如图3所示,使用该请求处理方法对请求进行处理的具体步骤如下:

s301、获取n个请求。

s302、根据n个请求写入队列的顺序,确定队列中第一个请求对应的协程为主导协程,其他请求对应的协程均为跟随协程。

s303、通过主导协程获取锁。

s304、通过主导协程合并n个请求,获取合并请求数据。

s305、通过主导协程释放锁。

s306、向计算设备提交合并请求数据。

s307、接收计算设备返回的计算结果。

s308、拆分计算结果,获取每个请求对应的响应结果。

s309、通过主导协程获取锁。

s310、通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

如上所述,在步骤s301中,若当前未处理的请求个数大于或等于6,则n等于6,即获取6个请求;如当前未处理的请求个数小于6,则n等于当前未处理的全部请求个数,即获取未处理的全部请求。

进一步地,服务器会根据所获取的请求写入队列的顺序,将第一个写入队列的请求对应的协程作为主导协程,将队列中其余请求对应的协程作为跟随协程。

例如,若获取到的请求个数n为6,则将位于队列首位的第一协程作为主导协程,其他第二协程、第三协程、第四协程、第五协程和第六协程为跟随协程。然后,通过作为主导协程的第一协程获取锁。再通过第一协程将上述6个协程分别对应的请求进行合并,得到合并请求数据,并将其提交至计算设备进行处理。计算设备在对合并请求数据处理后,会将计算结果进行返回。服务器将返回的算结果进行拆分得到每个请求对应的响应结果,并通过第一协程再次获取锁后,按照上述6个请求写入队列的顺序,通过第一协程将其他5个跟随协程唤醒,向每个协程发送对应的响应结果,并最终反馈给用户请求处理结果。

需要说明的是,在上述请求处理方法中,若当前未处理的请求个数大于6时,服务器获取第一批的6个请求合并,得到合并请求处理数据,提交到计算设备,并继续从剩余未处理的请求中获取下一批请求进行处理,循环该请求处理流程至所有请求处理完毕,则结束处理流程。

对于本应用实例中所描述的该请求处理方法所能具备的有益效果,与本申请在前述方法实施例中所述相同之处在此不再赘述。

另外,由于目前机器学习领域(如深度学习)中,机器学习开发框架大多都是侧重于云计算和在线预测,而对于端侧设备本地直接预测的场景都还有很大完善空间。而由于本申请提供的该请求处理方法能够提升服务器的计算性能,减少服务器在处理请求时的响应时间,提高效率,因此,从用户端速度体验、离线预测方案需求、以及端侧设备计算资源充分利用等角度来看,该请求处理方法还能够有助于机器学习(或深度学习)的预测部分进行跨平台、轻量级的实现,而且将会极大地提高预测部分的产品化效率。

为使本申请前述实施例中所述的请求处理方法的技术方案更加清楚明了,本申请在此还通过如下应用实例来进行说明:

假设服务器接收到用户输入的请求为8个,预设阈值为6,即每次最多获取6个请求作为一批进行处理,那么每次有6个请求可以被写入队列进行处理。服务器第一批获取到的6个请求分别对应到6个协程(w1,w2,w3,w4,w5和w6)中,且6个请求写入队列的顺序依次对应于上述6个协程。服务器根据6个请求写入队列的顺序,可确定w1作为主导协程,w2至w5均为跟随协程。在确定w1为主导协程后,通过w1获取到锁,然后w1对上述6个请求进行合并,得到合并请求数据,并释放所获取的锁,提交到计算设备进行计算。

进一步地,在计算设备返回计算结果后,w1会拆分计算结果,获取到上述6个请求分别对应的响应结果,并唤醒其他处于等待状态的w2至w5,发送对应的响应结果。

在上述处理第一批6个请求的过程中,w1释放锁以后,剩余未处理的2个请求对应的协程(w7和w8)可继续重复上述w1-w6的过程,将剩余的2个请求作为第二批进行处理。例如,在第二批请求处理过程中,w7、w8依次写入队列,服务器可确定w7作为主导协程。

如图5所示,本申请实施例还提供一种请求处理装置,包括:获取模块501、第一处理模块502、合并模块503和提交模块504。

获取模块501用于获取n个请求。其中,每个请求分别对应线程上的一个协程,一个线程包含一个或多个协程,n为大于0的整数、且小于或等于预设阈值。

第一处理模块502用于根据预设竞争规则,在n个协程中确定一个主导协程、其余n-1个协程均为跟随协程。

合并模块503用于通过主导协程合并n个请求,获取合并请求数据。

提交模块504用于向计算设备提交合并请求数据。

可选地,第一处理模块502具体用于根据n个请求写入队列的顺序,确定队列中第一个请求对应的协程为主导协程、其他请求对应的协程均为跟随协程。

可选地,如图6所示,上述请求处理装置还包括:接收模块505和第二处理模块506。

接收模块505用于接收计算设备返回的计算结果。

第二处理模块506用于拆分计算结果,获取每个请求对应的响应结果。

可选地,主导协程为运行状态、跟随协程为等待状态。第二处理模块506还用于在拆分计算结果,获取每个请求对应的响应结果之后,通过主导协程唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,第二处理模块506具体用于根据n个请求写入队列的顺序,通过主导协程依次唤醒每个请求对应的跟随协程,并向跟随协程反馈对应的响应结果。

可选地,第二处理模块506具体用于确定每个线程中跟随协程的唤醒顺序,根据唤醒顺序通过主导协程唤醒其他跟随协程,并向其他跟随协程反馈对应的响应结果。

可选地,获取模块501具体用于若当前未处理的请求个数大于或等于预设阈值,则获取预设阈值个请求;或者,若当前未处理的请求个数小于预设阈值,则获取所有当前未处理的请求。

可选地,主导协程为获取到锁的协程;第一处理模块502还用于在提交模块504向计算设备提交合并请求数据之前,通过主导协程释放锁。

可选地,第二处理模块506还用于在拆分计算结果,获取每个请求对应的响应结果之后,通过主导协程获取锁。

可选地,上述计算设备为mlu,当然不以此为限,还可以是cpu、gpu等。

如上所述,本申请实施例所提供的该请求处理装置,执行了前述方法实施例中所述的请求处理方法,因此具备前述方法实施例中所述的全部有益效果,本申请在此不再一一赘述。

另外,上述模块可以经由有线连接或无线连接彼此连接或通信。有线连接可以包括金属线缆、光缆、混合线缆等,或其任意组合。无线连接可以包括通过lan、wan、蓝牙、zigbee、或nfc等形式的连接,或其任意组合。两个或更多个模块可以组合为单个模块,并且任何一个模块可以分成两个或更多个单元。

需要特别说明的是,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

如图7所示,本申请实施例还提供一种电子设备,包括:处理器601、存储介质602和总线;存储介质602存储有处理器601可执行的机器可读指令,当电子设备运行时,处理器601与存储介质602之间通过总线通信,处理器601执行机器可读指令,以执行时执行如前述方法实施例所提供的请求处理方法的步骤。

具体地,存储介质602中所存储的机器可读指令为本申请前述实施例所述的请求处理方法的执行步骤,处理器601可执行该请求处理方法对请求进行处理,因此,该电子设备同样具备前述方法实施例中所述的全部有益效果,本申请亦不再重复描述。

需要说明的是,该电子设备可以是通用计算机或特殊用途的计算机,以及其他用于处理数据的服务器等,三者都可以用于实现本申请的请求处理方法。本申请尽管仅仅通过计算机和服务器分别对请求处理方法进行了说明,但是为了方便起见,也可以在多个类似平台上以分布式方式实现本申请描述的功能,以均衡处理负载。

例如,电子设备可以包括用于执行程序指令的一个或多个处理器、通信总线、和不同形式的存储介质,例如,磁盘、rom、或ram,或其任意组合。示例性地,计算机平台还可以包括存储在rom、ram、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本申请的方法。

为了便于说明,在电子设备中仅描述了一个处理器。然而,应当注意,本申请中的电子设备还可以包括多个处理器,因此本申请中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。

另外,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如前述方法实施例中所述的请求处理方法的步骤。

具体地,本申请前述实施例中所描述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

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