最近在做一个进程间频繁,数据量比较大的通讯

采用的是共享内存通讯,和生产者消费者模式。调试了几天,记录一些要点

结构如下图

注意:

1、因为是共享,如果进程B有多个对象要写数据到共享内存,每次写入计数和使用缓冲队列索引的时候都要使用全局的,如果不方便全局那也用共享内存来存储这两关键计数。

2、进程B在循环写入数据的时候加锁。

3、进程A读取缓冲队列里最新的数据,是通过读写入计数前后两次差值来确定的,如果超过了缓冲队列长度,那么就取最新的数据,同时在读完所有数据再释放锁,如果没有超过缓冲队列长度,那么直接释放锁就可以了,毕竟缓冲队列还可以再写入。

4、B进程写入计数应该避免溢出,最好大于一定的数就重新计,但这需要进程A依然可以计算出最新的数据数量

5、进程A在读取数据的时候,如果没有数据可能会一直读取,不要忘记sleep几毫秒,这几毫秒就是通讯的最大时间,速度杠杠的。

6、用Google.Protobuf来打包和解包数据特别方便,再附上生成通讯代码的批处理

cd /d %~dp0 
@echo off
for %%i in (*.proto) do protoc.exe -I=.\ --cpp_out=..\B\Proto %%i
for %%i in (*.proto) do protoc.exe -I=.\ --csharp_out=..\A\A.Proto %%i

for %%i in (*.xlsx)  do .\GenerateDccConfig.exe %cd%\%%i

最后附上关键代码:https://download.csdn.net/download/gao271003105/10539093

共享内存大数据量快速进程间通讯相关推荐

  1. 进程间基于共享存储区的通信_IPC(进程间通讯):inter process communication

    管道 (1)管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: (2)只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): (3)**单独构成一种独立的文件系统:**管道 ...

  2. 【Linux】-- 进程间通讯

    目录 进程间通讯概念的引入 意义(手段) 思维构建 进程间通信方式 管道 站在用户角度-浅度理解管道 匿名管道 pipe函数 站在文件描述符角度-深度理解管道 管道的特点总结 管道的拓展 单机版的负载 ...

  3. Excel大数据量单元格快速填充

    个人简介:一个从会计转行数据分析师的三旬老汉 擅长领域:数据分析.数据仓库.大数据 博客内容:平时会将自己工作中遇到的问题进行归纳总结,分享给各位小伙伴,意在帮助大家少加班.不掉发,让我们相互学习,一 ...

  4. linux open 头文件_linux下通过共享内存和mmap实现进程间通讯

    前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...

  5. linux mmap实例_Linux下通过共享内存和mmap实现进程间通讯(含实例)

    前言 最近在学习GNU/Linux内核,看到mmap的时候书上说: mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存.读写大文件.链接动态库文件,还是多进程间共 ...

  6. WIN32 进程间通讯-共享内存

    一.引言     在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换 ...

  7. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开     本文地址:h ...

  8. TensorFlow和Keras解决大数据量内存溢出问题

    NVIDIA DLI 深度学习入门培训 | 特设三场! 4月28日/5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共5771个字,1张图,预计阅读时间10分钟. 内存溢出问 ...

  9. Linux 进程间通讯(IPC)方式 ------- 共享内存

    Linux 进程间通讯(IPC)方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) ...

最新文章

  1. 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐
  2. 算法-判断是否是完全二叉树
  3. linux每日命令(15):tail命令
  4. Win8开发中如何加载字符串资源(C#)
  5. 微信小程序http转https
  6. Interview:人工智能岗位面试—人工智能岗位求职之机器学习算法工程师必备知识框架结构图
  7. 决策树:特征分布空间划分方法
  8. mysql授予权限和撤销权限的关系_MySQL数据库常用的授予权限和撤销权限的命令讲解...
  9. ORACLE 查询所有用户调度作业
  10. 分布式系统以及CAP原理
  11. dnf显示与服务器数据异常怎么办啊,DNF:你这该死的数据异常网络中断连接,让我心在痛泪在流...
  12. UML建模之活动图介绍(Activity Diagram)
  13. 网络医疗的进步让智能穿戴设备找到市场新蓝海
  14. [礼仪大赛策划方案]图:如何打造一场精美极致的礼仪大赛?PPT动态柱状图,如何动态显示?Flash如何渲染PPT界面呢?
  15. 驱动开发入门 - 之二:Win7-x64 + VMWare (Win7-x64) + WinDbg 双机调试环境搭建
  16. MATLAB【函数求导与积分】
  17. html给文字设置自己下载的字体
  18. HMC5883L 转换方向角与简易校准方法
  19. 计算机毕业设计 SSM+Vue房屋出租系统 房屋租赁合同信息管理系统 房屋租售管理系统Java Vue MySQL数据库 远程调试 代码讲解
  20. 这16道题都能答上来?恭喜你,90%的面试都能通过!

热门文章

  1. ORA-00119和ORA-00132的解决方案(Oracle11g--准确版本11.2)
  2. python gui编程for mac_Python IDE 开发软件-PyCharm pro for Mac
  3. 从live555 实战中了解MakeFile
  4. selenium 模拟登录 突破图片验证码(豆瓣网)
  5. mysql ogg kafka_ogg实时同步到Kafka
  6. 无线局域网技术(二)无线传输技术基础
  7. 越努力越幸运!(2017年终总结)
  8. 了解vue中的v-model,通俗易懂!
  9. psd转换为html模板
  10. 多账号自媒体工具,多平台同时发布