c++ - 对于 Mac 上的高带宽数据流,最有效的进程间通信方法是什么?

标签 c++ macos ipc

我有一个 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/

相关文章:

c++ - 是否有用于 double 平方根倒数的快速 C 或 C++ 标准库函数?

c++ - move 构造函数与复制省略。哪一个会被调用?

c++ - 如何访问由另一个 API 定义和分配的变量

python - 嵌入式Python,导入数学错误

python - python的IPC机制

c++ - 开源 RTP 混音器/翻译器 exe 或 sdk

c++ - 在 XCode 中构建时出现 FreeType 错误

c - 如何强制将 SIGILL 发送到我的程序?

c - 使用 sigqueue 和 SIGUSR1 将子 pid 发送给父亲

windows - Windows Hook 的 Linux 等价物