我有一个 C++ 程序(在 MacOS/X 下运行)生成高带宽数据流(大约每秒 27 兆字节)。第二个 C++ 程序接收该数据并以(软)实时方式处理它。低延迟和高可靠性都是该系统的目标。由于我无法控制的情况,这两个进程需要保持独立——也就是说,我不能将它们转换为同一进程中的两个线程。
目前我正在使用 UDP 数据包(由进程 A 发送到进程 B 正在监听的 127.0.0.1 上的 UDP 端口)来实现此数据传输,以及或多或少的工作(模偶尔丢弃的数据包),但我想知道是否没有针对此用例的更有效/合适的机制。 Unix pipe() 会更有效或更可靠吗?或者我应该将数据写入 mmap() 的共享内存区域,并使用管道/套接字/信号量/等来同步两个进程的写入和读取?还是 UDP-over-the-loopback-device 已经足够高效以至于切换到另一种方法几乎没有什么好处?
最佳答案
如果您可以管理同步,您肯定无法击败共享内存。内存中的单个拷贝,没有其他移动。您唯一的“慢”点是关于谁可以做什么以及在哪里做的任何争吵。
关于c++ - 对于 Mac 上的高带宽数据流,最有效的进程间通信方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575903/