[发明专利]实现进程间高效处理数据请求的方法及系统在审
申请号: | 202210484201.8 | 申请日: | 2022-05-06 |
公开(公告)号: | CN114840354A | 公开(公告)日: | 2022-08-02 |
发明(设计)人: | 贾德星 | 申请(专利权)人: | 山东浪潮科学研究院有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 孙园园 |
地址: | 250100 山东省济*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 实现 进程 高效 处理 数据 请求 方法 系统 | ||
1.一种实现进程间高效处理数据请求的方法,其特征在于,该方法是在客户进程和服务进程之间使用同一块连续的共享内存区域,在共享内存区域上创建共享内存环形且无锁队列和共享内存数据区,客户进程无锁访问写入请求到共享内存环形且无锁队列中,服务进程读取共享内存环形且无锁队列的请求及数据,并在处理后写入共享内存环形且无锁队列;其中,请求的实际数据存储在共享内存数据区中。
2.根据权利要求1所述的实现进程间高效处理数据请求的方法,其特征在于,共享内存环形且无锁队列按请求条目的大小切分,并设置两个指针,具体如下:
①、head:用于指示下一个可写的条目;
②、tail:用于指示下一个可读的条目。
3.根据权利要求1所述的实现进程间高效处理数据请求的方法,其特征在于,每个共享内存环形且无锁队列的条目是固定长度,共享内存环形且无锁队列的条目包括三个属性,具体如下:
①、ID:请求的标识;
②、Start:该请求数据在共享内存数据区的起始地址
③、End:该请求数据在共享内存数据区的结束地址。
4.根据权利要求1所述的实现进程间高效处理数据请求的方法,其特征在于,共享内存数据区按固定大小分割为若干block,用于支持多并发请求的读取处理。
5.根据权利要求1所述的实现进程间高效处理数据请求的方法,其特征在于,客户进程发送请求具体如下:
从共享内存数据区申请size大小的共享内存,得到Start起始的n个共享内存block,客户进程将请求数据写入该共享内存block中;
客户进程检查共享内存环形且无锁队列是否已满:
若能够写入新的请求,则申请一个请求ID,并创建共享内存环形且无锁队列条目,写入共享内存环形且无锁队列head位置的共享内存数据区;
写入成功后,将head指向共享内存环形且无锁队列的下一个位置;
当head已经移到共享内存环形且无锁队列尾部时,则将head指向共享内存环形且无锁队列起始位置。
6.根据权利要求1所述的实现进程间高效处理数据请求的方法,其特征在于,服务进程读取请求具体如下:
服务进程检查共享内存环形且无锁队列是否非空(tail!=head):
若有未读取的条目,则从共享内存环形且无锁队列的tail位置读取一个请求条目,根据请求条目的[start,end]索引,从共享内存数据区读取内存block,解析得到请求的数据,并交给执行线程处理该请求;
请求处理成功后,服务进程释放共享内存数据区中的数据,并将共享内存环形且无锁队列的tail指针移到下一个位置;
当tail已经移到共享内存环形且无锁队列尾部时,将tail重置到共享内存环形且无锁队列起始位置。
7.根据权利要求1-6中任一所述的实现进程间高效处理数据请求的方法,其特征在于,服务进程处理请求后,需要返回处理结果给客户进程具体如下:
共享内存环形且无锁队列有两个实例,分别为请求队列和响应队列;其中,请求队列用于保存客户进程的请求条目;响应队列用于保存服务进程处理请求后的结果;当客户进程无需请求处理结果时,无需响应队列;
服务进程从共享内存数据区申请共享内存block,将处理结果写入共享内存block,并构建响应条目:ID=请求的ID,[Start,End]=已分配的共享内存block地址;
将响应条目写入响应队列;
客户进程轮询检查响应队列,取出响应队列中的条目,与请求ID比较,识别请求的处理结果数据。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东浪潮科学研究院有限公司,未经山东浪潮科学研究院有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210484201.8/1.html,转载请声明来源钻瓜专利网。