全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202211081665.0 (22)申请日 2022.09.06 (71)申请人 浪潮软件集团有限公司 地址 250100 山东省济南市高新区科航路 2877号 (72)发明人 王浩之 江磊  (74)专利代理 机构 济南信达专利事务所有限公 司 37100 专利代理师 阚恭勇 (51)Int.Cl. G06F 9/54(2006.01) G06F 9/52(2006.01) G06F 16/27(2019.01) (54)发明名称 一种基于共享内存的进程间大规模数据传 输方法 (57)摘要 本发明提供一种基于共享内存的进程间大 规模数据传输方法, 属于分布式数据库技术领 域, 本发明通过共享内存保证了数据传输的高 速, 通过在共享内存中创建消息队列保证了数据 传输的可控。 消息队列底层通过环形数组 ringbuffer实现, 通过原 子操作保证了并发的高 效。 权利要求书1页 说明书3页 附图1页 CN 115470015 A 2022.12.13 CN 115470015 A 1.一种基于共享内存的进程间大规模数据传输方法, 其特 征在于, 使用基于共享内存的ri ngbuffer消息队列进行进程间数据传输 。 2.根据权利要求1所述的方法, 其特 征在于, 首先, 在机器上创建共享内存, 提供 给一个以上进程可同时访问; 其次, 在共享内存内创建用于通信的消息队列; 消息队列底层用ri ngbuffer实现; 然后, 采用l ock‑free的方式处 理并发问题; 最后, 消息队列负责传递数据在共享内存中的偏移, 无需拷贝。 3.根据权利要求2所述的方法, 其特 征在于, 工作逻辑采用先入先 出的方式, 队列一端用于发送数据, 另一端用于 接收数据。 4.根据权利要求3所述的方法, 其特 征在于, 在消息队列中, 使用原子变量实现的自旋锁 锁住队列的发送端和接收端。 5.根据权利要求 4所述的方法, 其特 征在于, 消息队列采用原子变量实现多 进程和多 线程的并发安全。 6.根据权利要求5所述的方法, 其特 征在于, 把待传输的数据存放到共享内存中, 即可通过消息队列进行传输 。 7.根据权利要求6所述的方法, 其特 征在于, 数据发送的过程如下: 1)发送进程将数据的指针传递给消息队列; 2)消息队列检查写自旋锁是否可以获得, 如果未获得则自旋获取; 3)消息队列获得了写自旋锁, 检查消息队列是否有空间, 若有空间则将数据地址写入 队列; 4)消息队列修改自身状态, 释放写自旋锁; 5)返回操作结果。 8.根据权利要求7 所述的方法, 其特 征在于, 数据接收的过程如下: 1)接收进程访问消息队列; 2)消息队列检查读自旋锁是否可以获得, 如果未获得则自旋获取; 3)消息队列获得了读自旋锁, 检查消息队列是否有数据, 若 有则获取最前面的数据; 4)消息队列修改自身状态, 释放读自旋锁; 5)返回数据。权 利 要 求 书 1/1 页 2 CN 115470015 A 2一种基于共享内存的进程间大规 模数据传输方 法 技术领域 [0001]本发明涉及分布式数据库技术领域, 尤其涉及一种基于共享内存的进程间大规模 数据传输方法。 背景技术 [0002]对于面向物联网的分布式数据库, 数据流量非常庞大, 需要承受的数据传输压力 也非常大。 对于在同一台机器上的不同进程, 如果采用本地socket或者管道等方式进行数 据传输, 其效率 都比不上通过共享内存传输。 而 单纯使用共享内存, 又无法有序组织起大规 模数据; 同时两个进程的多个线程同时访问共享内存, 也会带来严重的并发问题, 使用常规 的锁或者信号 量处理并发也会大 大降低并发效率。 发明内容 [0003]为了解决以上技术问题, 本发明提供了一种基于共享内存的进程间大规模数据传 输方法。 这一方法扩展了 常规的socket, 管道 等进程间通信方法, 充分利用进程处于同一台 机器上的共享内存的高效性能提高数据传输的效率; 同时可以解决多进程以及多线程同时 访问共享内存 带来的并发问题, 允许多进程和多线程的并发访问, 通过lock ‑free的逻辑避 免对进程间mutex的依赖, 同时减少资源占用, 提高并发效率。 在保证并发安全的基础上提 供数据有序高速传输的服 务, 实现大规模有序数据的高速、 安全传输 [0004]本发明专门用于优化分布式数据库 中同一台机器上的数据传输效率, 提供安全, 高速, 有序的数据传输 。 [0005]本发明的技 术方案是: [0006]一种基于共享内存的进程间大规模数据传输方法, 使用基于共享内存的 ringbuffer消息队列进行进程间数据传输 。 [0007]进一步的, [0008]首先, 在机器上创建共享内存, 提供 给一个以上进程可以同时访问; [0009]其次, 在共享内存内创建用于通信的消息队列; 消息队列底层用ri ngbuffer实现; [0010]然后, 采用l ock‑free的方式处 理并发问题; [0011]最后, 消息队列负责传递数据在共享内存中的偏移, 无需拷贝。 把待传输的数据存 放到共享内存中, 即可通过消息队列进行传输 。 [0012]其中, [0013]工作逻辑采用先入先 出的方式, 队列一端用于发送数据, 另一端用于 接收数据。 [0014]在消息队列中, 使用原子变量实现的自旋锁 锁住队列的发送端和接收端。 [0015]消息队列采用原子变量实现多 进程和多 线程的并发安全。 [0016]再进一步的, [0017]数据发送的过程如下: [0018]1)发送进程将数据的指针传递给消息队列;说 明 书 1/3 页 3 CN 115470015 A 3

.PDF文档 专利 一种基于共享内存的进程间大规模数据传输方法

文档预览
中文文档 6 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共6页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于共享内存的进程间大规模数据传输方法 第 1 页 专利 一种基于共享内存的进程间大规模数据传输方法 第 2 页 专利 一种基于共享内存的进程间大规模数据传输方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 00:48:38上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。