最近我正在为DVR构建软件。
它将安装在插有2个或更多PCIE x4视频编码器卡的x86 pc服务器上。
我们有2个分离的过程,一个必须从这些编码器卡获取编码的视频数据,另一个必须将这些数据保存到硬盘驱动器。为什么我们有两个过程?一些历史问题。
那么,我们应该使用什么样的IPC?套接字,管道或共享内存?
目前我们正在使用socket。
答案 0 :(得分:10)
使用linux上的管道,您可以使用splice
功能将数据的零拷贝移动从一个进程移动到另一个进程。例如,发送过程使用vmsplice()
和SPICE_F_GIFT
将数据提供给管道,然后接收进程使用splice()
和SPLICE_F_MOVE
直接从管道移动数据进入磁盘文件而不触摸它。请注意,围绕此自然存在一些对齐和长度限制。
根据编码器卡的驱动程序的工作方式,您可能会安排从驱动程序到磁盘的零拷贝 - 编码器卡DMA进入内存,磁盘将其DMA退出,而不是CPU需要查看它(在这种情况下,你会splice()
从编码器卡到管道的数据,然后splice()
它从管道返回到磁盘文件。)
答案 1 :(得分:-1)
使用IPC:
这有点像使用semphore作为计数器实现队列。