Linux 文件 IO - 多线程性能 - 写入不同的文件

2024-01-08

我目前正在开发一个音频录制应用程序,该应用程序从网络获取最多 8 个音频流并将数据保存到磁盘(简化的;))。 现在,每个流都由一个线程处理 - >同一线程还在磁盘上执行保存工作。

这意味着我有 8 个不同的线程在同一磁盘上执行写入操作,每个线程写入不同的文件。

您认为如果所有写入工作都由一个公共线程完成(将数据依次写入特定文件),磁盘 I/O 性能是否会有所提高?

操作系统是嵌入式Linux,“磁盘”是CF卡,应用程序是用C语言编写的。

感谢您的想法 缺口


简短的回答:考虑到您正在写入闪存盘,我不认为线程数会以某种方式产生很大的差异。但如果它确实有所作为,我希望多个线程比单个线程更快,而不是更慢。

较长的答案:

我大约 6 年前编写了一个与您所描述的程序类似的程序 - 它在嵌入式 PowerPC Linux 卡上运行,并向 SCSI 硬盘驱动器读取/写入多个同步音频文件。我最初用一个执行 I/O 的线程来编写它,因为我认为这会提供最佳的吞吐量,但事实证明情况并非如此。

特别是,当多个线程同时读/写时,SCSI 层知道来自所有不同线程的所有待处理请求,并且能够对 I/O 请求重新排序,从而最大限度地减少对驱动器磁头的查找。另一方面,在单线程 IO 场景中,SCSI 层仅了解单个“下一个”未完成的 I/O 请求,因此无法进行优化。在许多情况下,这意味着驱动头需要额外的行程,从而降低吞吐量。

当然,您的应用程序不使用 SCSI 或带有需要寻找磁头的旋转驱动器,因此这对您来说可能不是问题 - 但如果文件系统/硬件层知道多个同时 I/O 请求。找出答案的唯一真正方法是尝试各种模型并测量结果。

我的建议是将磁盘 I/O 移动到线程池中,将磁盘 I/O 与网络 I/O 解耦。然后,您可以将 I/O 线程池的最大大小从 1 更改为 N,并针对每个大小测量系统的性能。这将使您清楚地了解什么最适合您的特定硬件,而无需您多次重写代码。

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

Linux 文件 IO - 多线程性能 - 写入不同的文件 的相关文章

  • 如何在c#中指定时间后取消后台工作者

    如何在 C 中的指定时间后取消后台工作程序或取消无响应的后台工作程序 看看这个教程 http www albahari com threading part3 aspx http www albahari com threading par
  • SLURM 节点、任务、核心和 CPU

    有人能够澄清这些东西到底是什么吗 据我所知 节点是集群内的计算点 本质上是一台计算机 任务是可以在单个节点或多个节点上执行的进程 核心基本上是指您希望在单个节点上分配多少 CPU 来执行分配给该 CPU 的任务 它是否正确 我混淆了什么吗
  • iPhone 相当于 Application.DoEvents();

    iPHone 我们使用 MonoTouch 但 Obj C 答案还可以 我的单例域对象需要一段时间才能获取所有数据 因此它在线程中内部运行部分获取数据 我需要通知 UI 域已完成 目前我正在这样做 有没有更好的办法 在 WinForms 中
  • 在Spring中使用什么样的“EventBus”?内置、Reactor、Akka?

    我们将在几周后启动一个新的 Spring 4 应用程序 我们希望使用一些事件驱动的架构 今年 我到处读到有关 Reactor 的内容 在网上查找时 我偶然发现了 Akka 所以现在我们有3个选择 春天的ApplicationEvent ht
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 使用来自多个 kafka 主题的消息的最佳实践是什么?

    我需要消费来自不同卡夫卡主题的消息 我是否应该为每个主题创建不同的消费者实例 然后根据分区数量启动一个新的处理线程 或者 我应该从单个消费者实例订阅所有主题 并且应该启动不同的处理线程 感谢和问候 梅加 唯一的规则是 您必须考虑 Kafka
  • 如何在Python中增加文件名

    我正在尝试保存大量需要分成不同文件的数据 如下所示 数据 1 dat 数据 2 dat 数据 3 dat 数据 4 dat 我如何在Python中实现这个 from itertools import count filename data
  • 使用 Thread.Sleep 等待的替代方法

    首先我不是在问同样的问题C Thread Sleep 的替代方案 https stackoverflow com questions 5450353 c sharp alternative to thread sleep or C 中 Th
  • ASP.NET 开发人员真的需要关心线程安全吗?

    我认为自己了解线程的概念以及为什么某些代码是或不是 线程安全 的 但作为主要使用 ASP NET 的人 线程和线程安全是我很少考虑的事情 然而 我似乎在 Stack Overflow 上遇到了大量评论和答案 不一定适用于 ASP NET 大
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 在 Java 中复制文件的最快方法

    在 Java 中复制大量文件的最快方法是什么 到目前为止我已经使用了文件流和nio 总体来说流似乎比 nio 更快 到目前为止 你有哪些经历 http www baptiste wicht com 2010 08 file copy in
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • ASP.NET MVC 多线程

    我想在我的 asp net mvc 应用程序中实现这样的逻辑 user clicks a button gt server executes some time consuming logic in 15 threads i get dat
  • 以线程安全的方式获取随机数

    这是一篇描述随机数线程安全性的好文章 以线程安全的方式获取随机数 http blogs msdn com b pfxteam archive 2009 02 19 9434171 aspx 但我坚持使用 RandomGen2 示例 publ
  • 无法访问类型的封闭实例。 [复制]

    这个问题在这里已经有答案了 整个代码是 public class ThreadLocalTest ThreadLocal
  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • 从创建 UI 的同一线程更新 VCL。为什么?

    我知道我必须调用 Synchronize 来从未创建控件或向窗口发送消息的线程更新 vcl 我经常听到 线程不安全 这个词 但我找不到关于正在发生的事情的实际解释 我知道应用程序可能会因访问冲突而崩溃 但我又不知道为什么 请阐明这个主题 V
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub

随机推荐

  • Android 通话应用程序未重置音频流

    我设置了一个活动应用程序来使用自我管理连接服务 因为我们正在使用音频和视频并且希望能够利用该系统 然而 我们关闭连接或更改音频流的方式导致了一个问题 我将在此尽力描述该问题 当我开始应用程序的通话时 一切都按我们希望的方式工作 它以免提电话
  • 找不到关键字参数 '{'pk': ''}' 的反向 'plan_edit'。尝试了 1 个模式:['palan/edit$']

    我收到以下错误 找不到关键字参数 pk 的反向 plan edit 尝试了 1 个模式 palan edit 有谁知道如何解决它 urls py urlpatterns url r views post list name post lis
  • Android Studio - 检查代码 - 排除生成的文件

    有什么办法 如何排除 android 生成的文件 或手动指定排除的文件夹 分析 gt 检查代码 使用自定义范围 单击 分析 gt 检查代码 后 在 指定检查范围 对话框中 单击 自定义范围 后的 定义一个新的范围 递归包含Android a
  • 什么时候应该使用实体框架?

    我是实体框架的新手 当然 我在 SOF 上发现了一些关于目标用例的问题 让我给你一些信息 我不与不同的数据库供应商或不同的数据库打交道 一台 而且只有一台 SQL Server 2008 数据库的表少于 30 个 我真的需要重做事情并使用实
  • Multer 文件缓冲区丢失

    从以下返回的 req file 属性不包含缓冲区属性 https www npmjs com package multer https www npmjs com package multer 因此 当我尝试访问 req file buff
  • 使用 Android AccountManager 获取 gdata 的 authtoken

    所以我试图同步到谷歌文档 而不必询问用户的凭据 我使用此代码来获取身份验证令牌 AccountManager mgr AccountManager get activity authToken mgr blockingGetAuthToke
  • Mac 上的 JFileChooser 看不到中文字符命名的文件?

    该程序在Intellij中运行时运行良好 可以看到中文命名的文件 我将其构建到 jar 文件中 执行了 jar 和JFileChooser无法看到那些文件 我在 Windows 中尝试了该 jar 它工作得很好 这个文件在 Mac OS X
  • PDO——真实的事实和最佳实践? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过 HTML 代码在 UIView 中使用透明背景色

    我正在尝试在 UIView 中显示广告 我需要将背景颜色设置为透明 我尝试使用 viewObject setBackgroundColor UIColor clearcolor 尽管它使 UIView 透明 但它显示白色背景 下面是我尝试过
  • 当 QProcess 需要用户输入 Qt 时如何读取

    我使用 Qt 来实现一个允许开发嵌入式系统的接口 我面临一个问题 为了将程序闪存到嵌入式系统中 我使用 QProcess 以便使用命令 make 和 make flash 保证没有任何问题 程序编译成功 但是当我尝试对 make flash
  • Overlay.draw() 调用多次

    我有一个关于draw 的方法OverlayAndroid 地图中的类 移动地图时的方法draw 接到几次电话 从 4 次到 13 次 这对我来说是个问题 因为这个方法必须用 70000 点重新绘制我的路线 这是很多资源 我找不到这个问题的描
  • .NET 垃圾收集器之谜

    在我的工作中 我们遇到了 OutOfMemoryExceptions 问题 我编写了一段简单的代码来模仿某些行为 最终得到了以下谜团 看看这段简单的代码 当内存不足时 它就会崩溃 class Program private static v
  • 高分子纸波纹

    我试图在按下按钮时更改元素的颜色 我希望当按下按钮并且颜色发生变化时在该元素中触发纸张波纹效果 我该怎么做呢 目标元素
  • 充当文件上传的div?

    我只是想上传或浏览 div 本身 就像作为文件输入并触发其功能 但我的问题是我对 java 脚本很陌生 并且为自己集思广益近一个小时并寻找互联网上同样的问题 所以我别无选择只能在这里提问 my code div style border 1
  • Android AsyncTask 与进度对话框取消

    在我的android应用程序中 我使用带有进度对话框的AsyncTask 请等待登录 来使用我的网页 异步任务内的Web服务功能 登录用户 当用户单击设备上的 后退 按钮时 我想关闭进度对话框并取消 AsynTask 我找不到用于中断 As
  • Swift - 从 JSON 响应创建数据模型

    我正在学习 Swift 语言 很高兴听到其他人输入的内容之一是 如何处理来自 JSON 响应的模型 例如 I have User swift model class User NSObject var user token String v
  • 自动分配spring的bean名称以防止名称冲突?

    在Spring应用程序中 如果两个程序员开发两个包 将 Repository注释为相同的类名 Spring将抛出 IllegalStateException 注解指定的bean名称 mybean 代表 bean 类 foobar packa
  • 如何从 URL 方案中获取参数。

    我在我的 iPhone 应用程序中使用 URL 方案 从一个页面将用户切换到 safari 然后从网页单击一个按钮 我将恢复到应用程序 此时 一些参数是由网页传递的 例如 myapp parameter 1 如何从我的应用程序中找到此参数
  • jQuery.ajax -always() 并不总是运行

    我正在使用 jQuery ajax 进行 REST 调用并检索一些 JSON 它按预期工作 但是 当我强制出现错误条件 例如无效 URL 时 always 方法不会触发 如果我设置 crossDomain false 或 dataType
  • Linux 文件 IO - 多线程性能 - 写入不同的文件

    我目前正在开发一个音频录制应用程序 该应用程序从网络获取最多 8 个音频流并将数据保存到磁盘 简化的 现在 每个流都由一个线程处理 gt 同一线程还在磁盘上执行保存工作 这意味着我有 8 个不同的线程在同一磁盘上执行写入操作 每个线程写入不