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

2024-01-04

最近我正在为一个软件构建DVR http://en.wikipedia.org/wiki/Digital_video_recorder.

它将安装在插入了 2 个或更多 PCIE x4 视频编码器卡的 x86 PC 服务器上。

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

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

目前我们使用的是socket。


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

根据编码器卡驱动程序的工作方式,您可能可以安排从驱动程序到磁盘的全程零复制 - 编码器卡 DMA 进入内存,磁盘 DMA 退出,而不需要 CPU看看它(在这种情况下你会splice()将数据从编码器卡传入管道,然后splice()它从管道返回到磁盘文件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个进程之间交换大量数据的最有效方法是什么? 的相关文章

  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https

随机推荐

  • stopPropagation() 在 IE 中不起作用

    在 IE 中遇到一些问题 在 Chrome Opera 等中一切都很好 但在 IE 中我点击并切换类但没有任何反应 我认为实施 cancel bubble 会对我有所帮助 但事实并非如此 以下是 HTML div class title h
  • 使用 HtmlAgilityPack 包裹元素?

    我有一个HtmlDocument可能或可能有适当的 and 部分或者可能只是一个 html 片段 不管怎样 我想通过一个函数来运行它 以确保它具有 更 正确的 html 结构 我知道我可以通过查看是否有身体来检查它是否有身体 doc Doc
  • 在实体框架中使用 EntityDataSource 与 ObjectDataSource 的优缺点?

    在基于 Entity Framework asp net 的应用程序中使用 EntityDataSource 与 ObjectDataSource 有何优缺点 基本上实体数据源 http msdn microsoft com en us l
  • CSS 中的笑脸“:)”是什么意思?

    我在一个项目中发现了这段 CSS 代码 html body width 640px 我已经使用CSS很长时间了 但我以前从未见过这个 代码 这有什么意义还是只是一个错字 From an 文章位于 javascriptkit com http
  • 转换行结尾[重复]

    这个问题在这里已经有答案了 我一直在使用d2u转换行结尾 安装 Puppy Linux 后 我注意到它没有附带d2u but dos2unix 然后我注意到 Ubuntu 默认情况下缺少这两者 转换行结尾的另一种方法是什么 一些选项 Usi
  • *it++ 对于输出迭代器如何有效?

    在示例代码中 我经常看到这样的代码 it 用于输出迭代器 表达方式 it 复制一份it 增量it 然后返回最终取消引用的副本 据我了解 制作输出迭代器的副本会使源无效 但随后增量为it创建副本后执行的操作是非法的 对吗 我对输出迭代器的理解
  • 悬停时增加文本大小

    所以这是我的问题 On hover 我想要字体大小增加 但我想要黑色容器保持一致像之前一样 正如您可能通过示例了解的那样 黑色容器也在增加 这个问题如何在悬停时仅增加文本框中文本的字体大小 https stackoverflow com q
  • 获取元视口标签以在桌面上工作

    我创建了一个在桌面上启用元视口标签的脚本 但是我似乎无法从视口标签获取指定的宽度 我目前有这个 var viewportcontent myviewport attr content var viewportcontents viewpor
  • 属性错误:“对象没有属性”

    我有一个问题 我正在使用 python 3 编写代码 该代码是将网站的新闻发布到我的画布上 但是我不断收到此错误 其中显示 AttributeError NewsFeed 对象没有属性 canvas 这是我的代码 from tkinter
  • 查询将行数据显示为列

    我需要一个查询来执行行记录作为列 例如 行保存数据为 101 102 103 104 结果应该是 101 102 103 104 你可以检查切换sql中的行和列 http www simple talk com sql t sql prog
  • 如何高效生成Zipf分布数?

    我目前正在对 C 中的一些数据结构进行基准测试 我想在处理 Zipf 分布式数字时测试它们 我正在使用此网站上提供的生成器 http www cse usf edu christen tools toolpage html http www
  • 在c中交换两个结构

    您好 我正在尝试创建一个交换函数来交换结构的前两个元素 有人可以告诉我如何进行这项工作吗 void swap struct StudentRecord A struct StudentRecord B struct StudentRecor
  • 在 VSCode 中关闭提交消息文件时,Git 挂起并显示“提示:正在等待编辑器关闭文件...”

    我在跑git commit amend在 VSCode 终端中 它会在 VSCode 编辑器窗口中以文件形式弹出提交消息 并且 git 会说 在终端中 hint Waiting for your editor to close the fi
  • 有没有办法自定义ViewPager滚动的阈值?

    我无法找到更改 ViewPager 中滚动页面的触摸阈值的方法 http developer android com reference android support v4 view ViewPager html http develop
  • 获取上次重新启动时间[重复]

    这个问题在这里已经有答案了 可能的重复 显示构建日期 https stackoverflow com questions 1600962 displaying the build date 如何知道 Windows 何时启动或关闭 http
  • 声明全局静态变量

    我正在尝试在 Visual Studio 中设置全局变量 但无法将其设为静态 有什么方法可以让我将变量设置为静态并在不同的方法之间共享它 或者有什么方法可以在每次更改时保存变量 您有两个选择 1 创建一个包含共享变量的类 这与 C 中的静态
  • 摆脱新 Android 上的旧应用程序图标

    前段时间我做了一个简单的 Android 应用程序 一个上传数据的共享意图处理程序 现在我为它设计了一个新的 SVG 图标 以矢量图形导入到项目中 然后使用 InkScape 转换为一系列 PNG 并替换项目中的所有 PNG 该应用程序现在
  • 使用 SparkSession 或 sqlcontext 时出错

    我是火花新手 我只是想使用sparksession 或sqlcontext 解析json 文件 但每当我运行它们时 我都会收到以下错误 Exception in thread main java lang NoSuchMethodError
  • 无法在 /usr/bin 内部创建符号链接,即使使用 sudo [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我尝试对 usr bin 文件夹中的二进制文件进行符号链接时 出现 操作不允许 错误 sudo ln s usr bin python2
  • 在两个进程之间交换大量数据的最有效方法是什么?

    最近我正在为一个软件构建DVR http en wikipedia org wiki Digital video recorder 它将安装在插入了 2 个或更多 PCIE x4 视频编码器卡的 x86 PC 服务器上 我们有两个独立的进程