一种api请求保序处理方法及系统的制作方法

文档序号:8942933阅读:252来源:国知局
一种api请求保序处理方法及系统的制作方法
【技术领域】
[0001]本发明涉及网络通信领域,尤其涉及一种API请求保序处理方法及系统。
【背景技术】
[0002]大型软件系统为了实现扩展性、模块解耦和代码重用,一般采用面向服务的架构,即整个软件系统由提供各种不同服务的API模块组成。最初的API服务架构由单进程单线程实现。为了提高服务的并发能力,通常会使用多进程、多线程或协程的方式实现。
[0003]多进程架构的问题在于进程间通信的复杂性,且难以维护全局资源锁。多线程架构的问题在于线程上下文切换带来的资源开销。此外,多进程和多线程架构都面临无法保序响应API请求的问题。举例来说,当对于同一个对象obj的不同API请求先后到达时,API服务端由于缺乏排队机制,进程及线程完全由CPU随机调度,可能导致后到达的API先执行或并发交替执行,执行结果违背API调用者的初衷。写成架构由程序员控制操作逻辑的切换,但当异步1较多时,精细控制切换逻辑对程序员的要求很高,容易出错。另外,已有的大量代码、程序、第三方库等并不支持异步10,不能被协程调用,也使得协程架构经常伤失并发能力。
[0004]因此,如果在保证API服务并发能力的同时,支持对API请求的保序处理成为当前亟需解决的问题。

【发明内容】

[0005]本发明提供一种API请求保序处理方法及系统,实现预先创建的多个线程并发处理API请求,并实现API请求的保序处理。
[0006]第一方面,本发明提供一种API请求保序处理方法,包括:
[0007]主线程判断当前处理的API请求是否包括1操作;
[0008]若主线程确定当前处理的API请求包括1操作,则创建与该API请求对应的请求回复队列和请求回复线程,以及
[0009]所述主线程将所述API请求中的四元组信息加入到请求调度队列中,以使调度线程处理该请求调度队列中四元组信息对应的任务,且所述请求回复线程阻塞等待该API请求对应的执行结果;所述请求调度队列和调度线程为在API进程启动时创建的;
[0010]所述主线程执行下一个需要处理的API请求。
[0011]可选地,所述主线程判断当前处理的API请求是否包括1操作的步骤之前,所述方法还包括:
[0012]在API进程启动时,该API进程创建用于将请求调度队列中的任务分配到对应的请求等待队列的调度线程,创建用于处理请求等待队列中的任务的一个以上的请求处理线程,以及创建用于处理回调等待队列中的任务的一个以上的回调线程。
[0013]可选地,所述主线程将所述API请求中的四元组信息加入到请求调度队列中的步骤之后,所述方法还包括:
[0014]所述调度线程从所述请求调度队列中依次获取待执行的四元组信息的任务,按照预设分配策略将待执行的四元组信息的任务分配到对应的请求等待队列,每一请求等待队列对应一请求处理线程;
[0015]所述请求处理线程依次获取各自对应的请求等待队列中四元组信息的任务并执行,获得执行结果,并将执行结果加入到请求回复队列中;以及,所述请求处理线程判断执行结果中的回调函数是否为空,若不是,则将该执行结果加入到请求回复队列的同时加入到回调等待队列中;
[0016]与当前处理的API请求对应请求回复线程获取该API请求依序处理的执行结果,处理后并同步返回API调用模块;
[0017]相应地,回调线程依次执行回调等待队列中的执行结果中的回调处理函数,处理后并异步回复API调用模块。
[0018]可选地,所述调度线程按照预设分配策略将待执行的四元组信息分配到对应的请求等待队列的步骤包括:
[0019]若某个请求等待队列的四元组信息中存在API保序标识符等于待执行四元组信息中的API保序标识符,则将四元组信息的任务分配到该请求等待队列;
[0020]否则,将四元组信息的任务分配到所有请求等待队列的长度最短的一个请求等待队列中。
[0021]可选地,所述四元组信息包括:API请求处理过程func、请求回复队列、回调函数、API保序标识符aid。
[0022]第二方面,本发明还提供一种API请求保序处理系统,包括:
[0023]主线程处理模块,用于判断当前处理的API请求是否包括1操作;在确定当前处理的API请求包括1操作时,创建与该API请求对应的请求回复队列和请求回复线程,以及
[0024]主线程处理模块,还用于将所述API请求中的四元组信息加入到请求调度队列中,并执行下一个需要处理的API请求。
[0025]可选地,所述系统还包括:
[0026]线程创建模块,用于在API进程启动时,该API进程创建用于将请求调度队列中的任务分配到对应的请求等待队列的调度线程,创建用于处理请求等待队列中的任务的一个以上的请求处理线程,以及创建用于处理回调等待队列中的任务的一个以上的回调线程。
[0027]可选地,线程创建模块:
[0028]调度线程处理单元,用于从所述请求调度队列中依次获取待执行的四元组信息,按照预设分配策略将待执行的四元组信息分配到对应的请求等待队列,每一请求等待队列对应一请求处理线程;
[0029]请求处理线程处理单元,用于依次获取各自对应的请求等待队列中的四元组信息并执行,获得执行结果,并将执行结果加入到请求回复队列中;以及,判断执行结果中的回调函数是否为空,若不是,则将该执行结果加入到请求回复队列的同时加入到回调等待队列中;
[0030]回调线程处理单元,用于依次执行回调等待队列中的执行结果中的回调处理函数,处理后并异步回复API调用模块;
[0031]所述主线程处理模块包括:请求回复线程处理单元,该请求回复线程处理单元用于获取该API请求依序处理的执行结果,处理后并同步返回API调用模块。
[0032]可选地,所述调度线程处理单元,具体用于
[0033]在某个请求等待队列的四元组信息中存在API保序标识符等于待执行四元组信息中的API保序标识符,则将四元组信息的任务分配到该请求等待队列;
[0034]否则,将四元组信息的任务分配到所有请求等待队列的长度最短的一个请求等待队列中。
[0035]可选地,所述四元组信息包括:API请求处理过程func、请求回复队列、回调函数、API保序标识符aid。
[0036]由上述技术方案可知,本发明的API请求保序处理方法及系统,使用多个请求处理线程响应API,能实现对API的并发服务,进一步将同一操作对象的aid的不同API请求放置于同一请求等待队列中先进先出处理,能实现对API请求的保序服务。
【附图说明】
[0037]图1为本发明一实施例提供的API请求保序处理方法的流程示意图;
[0038]图2为本发明一实施例提供的API请求保序处理方法的流程示意图;
[0039]图3为本发明一实施例中API请求保序处理过程的示意图;
[0040]图4为本发明一实施例提供的API请求保序处理系统的结构示意图。
【具体实施方式】
[0041]下面结合附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0042]图1示出了本发明一实施例提供的API请求保序处理方法的流程示意图,如图1所示,本实施例的API请求保序处理方法如下所述。
[0043]101、主线程判断当前处理的API请求是否包括1操作;
[0044]102、若主线程确定当前处理的API请求包括1操作,则创建与该API请求对应的请求回复队列和请求回复线程。
[0045]当然,在主线程确定当前处理的API请求不包括任何的1操作时,可由主线程执行该API请求,在主线程执行完成该API请求之后处理下一个API请求,即将下一个API请求作为当前处理的API请求,重复上述的步骤101。
[0046]103、主线程将所述API请求中的四元组信息加入到请求调度队列中,以使调度线程处理该请求调度队列中四元组信息对应的任务,且所述请求回复线程阻塞等待该API请求对应的执行结果;所述请求调度队列和调度线程为在API进程启动时创建的;
[0047]104、主线程执行下一个需要处理的API请求,即将下一个需要处理的API请求作为主线程当前处理的API请求。
[0048]本实施例的API请求保序处理方法可实现预先创建的多个线程并发处理API请求,并实现API请求的保序处理。
[0049]图2示出了本发明一实施例提供的API请求保序处理方法的流程示意图,图3示出了本发明一实施例中API请求保序处理过程的示意图,结合图2和图3所示,本实施例的API请求保序处理方法如下所述。
[0050]201、在API进程启动时,该API进程创建用于将请求调度队列中的任务分配到对应的请求等待队列的调度线程,创建用于处理请求等待队列中的任务的一个以上的请求处理线程,以及创建用于处理回调等待队列中的任务的一个以上的回调线程。
[0051]可理解的是,在实际应用中,进程可创建多个线程池,例如,一个调度线程池,一个请求处理线程池、一个回调线程池等。通常,调度线程池中有一个调度线程,请求处理线程池中有4个请求处理线程,回调线程池中有2个回调线程。
[0052]202、主线程判断当前处理的API请求是否包括1操作。
[0053]本实施例中,的1操作可包括:文件读写、数据库读写、网络读写等等。
[0054]当然,如果当前处理的API请求中不包括任何的1操作,则由主线程执行该API请求处理过程,执行完成后跳转执行下一个需要处理的API请求即重复上述的步骤202。
[0055]203、若主线程确定当前处理的API请求包括1操作,则创建与该API请求对应的请求回复队列和请求回复线程。
[0056]204、主线程将所述API请求中的四元组信息加入到请求调度队列中。
[0057]204a、执行下一个需要处理的API请求即针对下一个API请求,可重复上述的步骤202。
[0058]205、调度线程从所述请求调度队列中依次获取待执行的四元组信息的任务,按照预设分配策略将待执行的四元组信息的任务分配到对应的请求等待队列,每一请求等待队列对应一请求处理线程。
[0059]举例来说,四元组信息可包括:API请求处理过程(func)、请求回复队列、回调函数、API保序标识符(aid)。例
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1