我需要几个客户端程序(立体声 DSP 音频发生器),以便能够以大约 16kB/s 的数据速率与 I2C 总线上的外部外围设备进行连续双向通信,每 1ms 更新一次,所有这些都在 700MHz CPU 上运行。这些程序将需要同时访问读取和写入,但我不关心写入锁定。
我正在设想一个守护进程来管理原始 I2C 通信,客户端音频程序通过以下 IPC 选项之一与守护进程通信:
- 总线
- 伯克利/POSIX 套接字
- 内存映射文件
对于 DBUS,我有性能问题,对于 Berkeley/POSIX 套接字,我不确定如何处理多个客户端。同样重要的是不会发生锁定,因为守护进程通信必须与音频渲染发生在同一个线程中。
内存映射似乎适合这项任务。10 个字节就可以了,我需要 4 个字节用于输入,4 个字节用于输出,以某种方式告诉守护程序它现在应该写入输出字节,以及以某种方式告诉守护程序它当前应该不断更新输入字节。但据我了解,内存映射依赖于操作系统的缓冲,所以我不确定如果我的守护进程在我的客户端应用程序处于read()
操作中间时更新输入字节会发生什么。
在我的场景中,进程间通信的最佳选择是什么?