【 在 AlphaO 的大作中提到: 】
: 程序A是我的,数据原本自我闭环,用Rust写的。程序B是另一家单位的,想要引出A的内部数据做它们自己的科学研究,用C开发。
: 数据是3路实时图像帧,分别是10000×10000、5000×5000、5000×5000灰度图,帧率不算低,三路加起来大概1200MB/s,用上压缩顶多能降到1000MB/s,远超以太网传输带宽。
: 我觉得共享内存是个好办法,但是会和B进程耦合,我怕它们时序接不住,进而影响我发送时序。
: ...................
从表述看, 楼主对共享内存的概念理解有误, 其实,从字面意思,共享内存就是分享内存的意思。
其原理, 就是把A进程存在的物理内存, 直接映射给B进程, 这个过程涉及的只是操作系统的虚拟内存映射,
基本不涉及物理内存的数据写入。
如果是块状内存, A创建共享内存块, 写完使用完, 共享给B进程, B用完销毁。
共享给B进程的同时, A可以同步创建另一个内存块, B进程使用之前的内存块,也不影响A新创建的另一个内存块, 因此, 也不存在影响A的发送时序的问题, 除非, B进程使用的实在太慢, A把所有物理内存都写光了, B进程还一块也没用完释放出来。
从楼主的描述看, 视频图像数据更像是流式数据, 没有头位分块, 如果要同步在同一个固定共享内存块进行读写,那就不得不考虑同步, A写满要等待B读出, 确实会影响效率。
--
FROM 115.171.155.*