【问题标题】:What's the most efficient inter-process communication method for a high-bandwidth data stream on a Mac?对于 Mac 上的高带宽数据流,最有效的进程间通信方法是什么?
【发布时间】:2015-02-18 04:19:20
【问题描述】:

我有一个 C++ 程序(在 MacOS/X 下运行)生成高带宽数据流(大约每秒 27 兆字节)。第二个 C++ 程序接收该数据并(软)实时处理它。低延迟和高可靠性都是该系统的目标。由于我无法控制的情况,这两个进程需要保持分开——也就是说,我不能将它们转换为同一个进程中的两个线程。

目前我正在使用 UDP 数据包(由进程 A 发送到进程 B 正在侦听的 127.0.0.1 上的 UDP 端口)来实现此数据传输,并且或多或少的工作方式(以偶尔丢弃的数据包为模),但我想知道这个用例是否没有更有效/更合适的机制。 Unix pipe() 会更有效或更可靠吗?或者我应该将数据写入 mmap() 的共享内存区域,并使用管道/套接字/信号量/等来同步两个进程的写入和读取?还是 UDP-over-the-loopback-device 已经足够高效,切换到另一种方法几乎没有什么好处?

【问题讨论】:

  • (作为提示,每当您通过环回套接字执行 UDP/TCP 时,标准的 UNIX 文件式套接字应该提供更好的性能)。

标签: c++ macos ipc


【解决方案1】:

如果您可以管理同步,您当然无法击败共享内存。内存中的单个副本,没有其他动作。你唯一的“慢”点将是关于谁可以做什么以及在哪里做的任何争论。

【讨论】:

  • 我支持这个。我已经成功编写了一个程序,该程序可以使用 OS X 上的共享内存将超过 100MB/s 的视频流多路复用到多个下游读取器进程。它在 2011 年的旧 MacBook 上运行良好,没有任何问题。
猜你喜欢
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2010-10-06
  • 2014-01-12
  • 2010-12-06
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多