【发布时间】:2012-11-28 21:21:29
【问题描述】:
我需要在 Windows 7 中将大量数据 (~10MB) 从一个程序发送到另一个程序。我想要一种方法,该方法可以在系统负载非常低的情况下实现每秒至少 1 GB 的总吞吐量。为了简化这一点,所有 blob 的大小可能相同,并且一个程序可能是另一个程序的子进程。
方法一:Memory map the same file in both programs: CreateFileMapping() / MapViewOfFile()
在这种情况下,内存映射文件可能会在环形缓冲区中包含几个 blob 的空间。需要一些外部机制来同步对环形缓冲区的访问。
方法二:Create named data sections
方法 3:WriteProcessMemory(下面是 Hristo Iliev 的建议,谢谢!)
方法 4:读/写 RAM 磁盘上的文件。
方法 5:读/写匿名管道。
方法?:还有什么?也许通过 TCP 编写,使用 MPI,...
我知道内存映射文件(方法 1)被认为是这个问题的标准解决方案 :)
内存映射文件的速度有多快? (大致数量级)
有更快的方法吗?
其他方法的性能差多少?其中哪些可以达到 GB/秒的吞吐量?
如果使用内存映射文件,程序同步访问正在传递的数据的最佳方式是什么? (即:生产者如何向消费者指示新的 blob 可用,以及消费者如何指示它已使用特定的 blob 完成?)
-
如果使用内存映射文件,是所有 blob 一起使用一个文件(文件中的环形缓冲区)还是每个 blob 一个文件(文件的环形缓冲区)更好?
李>
【问题讨论】:
标签: windows ipc pipe shared-memory memory-mapped-files