gpt4 book ai didi

linux - 在 2 个进程之间交换大量数据的最有效方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:59:30 29 4
gpt4 key购买 nike

最近我正在为 DVR 构建软件.

它将安装在一个 x86 pc 服务器上,并插入 2 个或更多 PCIE x4 视频编码卡。

我们有 2 个独立的过程,一个必须从这些编码卡中获取编码的视频数据,另一个必须将这些数据保存到硬盘驱动器。为什么我们有2个过程?一些历史问题。

那么,我们应该使用什么样的IPC呢?套接字、管道或共享内存?

目前我们正在使用套接字。

最佳答案

对于 Linux 上的管道,您可以使用 splice 功能将数据从一个进程零拷贝移动到另一个进程。例如,发送进程使用 vmsplice()SPICE_F_GIFT 将数据赠送给管道,然后接收进程使用 splice()SPLICE_F_MOVE 将数据直接从管道移动到磁盘文件中而不接触它。请注意,这自然有一些对齐方式和长度限制。

根据编码器卡驱动程序的工作方式,您可能可以安排从驱动程序到磁盘的所有方式进行零复制 - 编码器卡 DMA 进入内存,磁盘 DMA 退出,无需CPU 永远需要查看它(在这种情况下,您将 splice() 编码器卡中的数据放入管道,然后 splice() 将其从管道中取出到磁盘文件)。

关于linux - 在 2 个进程之间交换大量数据的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1350361/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com