我有一个C ++程序(在MacOS / X下运行),可生成高带宽数据流(每秒约27兆字节)。第二个C ++程序接收该数据并以(软)实时处理它。低延迟和高可靠性是该系统的目标。由于我无法控制的情况,这两个进程需要分开 - 也就是说,我无法将它们转换为同一进程中的两个线程。
目前我正在使用UDP数据包(由进程A发送到进程B正在侦听的127.0.0.1上的UDP端口)来实现此数据传输,以及或多或少的工作(模数偶尔丢弃的数据包),但我想知道这个用例是否没有更有效/适当的机制。 Unix管道()是否会显着提高效率或可靠性?或者我应该将数据写入mmap()共享内存区域,并使用管道/套接字/信号量/ etc来同步两个进程的写入和读取?或者UDP-over-the-loopback-device已经足够有效,切换到另一种方法几乎没有什么好处?
答案 0 :(得分:3)
如果可以管理同步,则无法击败共享内存。内存中的单一副本,没有其他动作。你唯一的“缓慢”点就是谁可以做什么,哪里做什么的战斗。