我需要在 Windows 7 中将大量数据(~10MB)从一个程序发送到另一个程序。我想要一种方法,该方法允许至少每秒 1 GB 的总吞吐量,并且系统负载非常低。为了简化这一点,所有 blob 的大小可能相同,并且一个程序可能是另一个程序的子进程。
方法1:在两个程序中内存映射同一个文件:CreateFileMapping() / MapViewOfFile()
在这种情况下,内存映射文件可能包含用于环形缓冲区中的几个 blob 的空间。需要一些外部机制来同步对环形缓冲区的访问。
方法 2:创建命名数据段
方法 3:WriteProcessMemory(下面由 Hristo Iliev 建议,谢谢!)
方法 4:读/写 RAM 盘上的文件。
方法 5:读/写匿名管道。
方法?:还有别的吗?也许通过 TCP 编写,使用 MPI,...
我知道内存映射文件(方法1)被认为是这个问题的标准解决方案:)
内存映射文件有多快?(大致数量级)
有没有更快的方法?
其他方法的性能差多少?其中哪些可以达到 GB/秒的吞吐量?
如果使用内存映射文件,程序同步访问正在传递的数据的最佳方式是什么?(即:生产者如何向消费者指示新的 blob 可用,以及消费者如何指示它已使用特定的 blob 完成?)
如果使用内存映射文件,最好将所有 blob 放在一个文件中(文件中的环形缓冲区),还是每个 blob 一个文件(文件的环形缓冲区)?