[发明专利]一种并发处理API请求的方法及系统有效
申请号: | 201711395321.6 | 申请日: | 2017-12-21 |
公开(公告)号: | CN108089919B | 公开(公告)日: | 2021-01-15 |
发明(设计)人: | 向阳;金捷 | 申请(专利权)人: | 北京云杉世纪网络科技有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48;G06F9/50 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;李相雨 |
地址: | 100083 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 并发 处理 api 请求 方法 系统 | ||
1.一种并发处理API请求的方法,其特征在于,包括:
S1,若当前API请求对应的当前任务包括I/O操作,则使用当前服务协程生成所述当前任务的第一三元组,所述当前服务协程是在主线程中为所述当前API请求预先创建的;
S2,当所述当前服务协程异步等待时间达到预设时长时,将所述主线程的调度逻辑切换到满足预设条件的其他服务协程,获取所述其他服务协程生成其他API请求对应的其他任务的第二三元组;
S3,根据所述第一三元组中当前任务的保序标识符和所述第二三元组中其他任务的保序标识符,使用预先创建的调度线程将所述当前任务和所述其他任务分配到各等待队列中;
S4,使用预先创建的任务处理线程对所述各等待队列中的当前任务和其他任务进行处理,将处理结果保存到所述第一三元组和所述第二三元组中的请求结果队列中,所述任务处理线程与所述等待队列一一对应;
所述步骤S1之前还包括:
在API服务启动时,创建一个调度线程、预设数量的等待队列和所述预设数量的任务处理线程;
当当前API请求到达主线程时,在所述主线程中为所述当前API请求创建一个当前服务协程。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1还包括:
若所述当前API请求对应的所述当前任务不包括I/O操作,则使用所述当前服务协程执行所述当前任务。
3.根据权利要求1或2所述的方法,其特征在于,所述第一三元组包括所述当前任务、所述当前API请求的请求结果队列和所述当前任务的保序标识符;
所述第二三元组包括所述其他任务、所述其他API请求的请求结果队列和所述其他任务的保序标识符。
4.根据权利要求1或2所述的方法,其特征在于,所述步骤S2具体包括:
计算各所述其他服务协程的剩余等待时长;
将所述主线程的调度逻辑切换到所述剩余等待时长最短的所述其他服务协程。
5.根据权利要求1或2所述的方法,其特征在于,所述步骤S2具体包括:
每隔所述预设时长使用所述当前服务协程检测所述第一三元组中的请求结果队列;
若所述第一三元组中的请求结果队列中有结果,则返回所述请求结果队列中的API,终止所述当前服务协程;或者
若所述第一三元组中的请求结果队列中没有结果,则所述当前服务协程继续等待。
6.根据权利要求1或2所述的方法,其特征在于,所述步骤S2还包括:
分别计算所述主线程中各其他服务协程和请求协程的剩余等待时长,所述请求协程用于接收API请求;
若所述剩余等待时长最短的协程为所述请求协程,则使用所述请求协程等待并接收下一个API请求。
7.根据权利要求1或2所述的方法,其特征在于,所述步骤S2之后还包括:
将所述第一三元组和所述第二三元组保存到调度队列中;
相应地,所述步骤S3具体包括:
使用所述调度线程依次从所述调度队列中获取所述第一三元组和所述第二三元组中的保序标识符。
8.根据权利要求1或2所述的方法,其特征在于,所述步骤S3具体包括:
若所述等待队列中存在所述第一三元组和/或所述第二三元组中保序标识符的第一任务,则将与所述第一任务的保序标识符相同的当前任务或其他任务分配到所述第一任务所在的等待队列中;或者,
若预先创建的任务处理线程正在处理所述第一三元组和/或所述第二三元组中保序标识符的第二任务,则将与所述第二任务的保序标识符相同的当前任务或其他任务分配到所述第二任务所在的等待队列中;或者,
若所述等待队列中不存在所述第一任务且所述任务处理线程没有正在处理所述第二任务,则将所述当前任务和其他任务分配到长度最小的所述等待队列中。
9.一种并发处理API请求的系统,其特征在于,包括:
生成单元,用于在当前API请求对应的当前任务包括I/O操作时,使用当前服务协程生成所述当前任务的第一三元组,所述当前服务协程为在主线程中预先为所述当前API请求创建的;
切换单元,用于当所述当前服务协程异步等待时间达到预设时长时,使用异步等待机制将所述主线程的调度逻辑切换到其他服务协程,获取其他服务协程生成其他API请求对应的其他任务的第二三元组;
分配单元,用于根据所述第一三元组中当前任务的保序标识符和所述第二三元组中其他任务的保序标识符,使用预先创建的调度线程将所述当前任务和所述其他任务分配到各等待队列中;
处理单元,用于使用预先创建的任务处理线程对对应的所述各等待队列中的当前任务和其他任务进行处理,将处理结果保存到所述第一三元组和所述第二三元组中的请求结果队列中,所述任务处理线程与所述等待队列一一对应;
还包括创建单元,用于在API服务启动时,创建一个调度线程、预设数量的等待队列和所述预设数量的任务处理线程;当当前API请求到达主线程时,在所述主线程中为所述当前API请求创建一个当前服务协程。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京云杉世纪网络科技有限公司,未经北京云杉世纪网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711395321.6/1.html,转载请声明来源钻瓜专利网。