共享内存大数据量快速进程间通讯

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

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

结构如下图


注意:

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

猜你喜欢

转载自blog.csdn.net/gao271003105/article/details/81028944
今日推荐