是否可能:使用多个线程将输出流式传输到不同的文件/

Posted

技术标签:

【中文标题】是否可能:使用多个线程将输出流式传输到不同的文件/【英文标题】:Is it possible: Using multiple threads to stream output to different files / 【发布时间】:2017-03-04 05:25:01 【问题描述】:

我正在做一个 C++ 项目,通过一些已知的力场来跟踪粒子。该代码以粒子的位置和动量的形式生成大量数据。我已经在粒子跟踪例程中使用了openmp指令。但是,整体性能最终取决于编写输出文件所花费的时间。我知道不建议使用线程将数据写入输出文件(我已经尝试过)。我很好奇是否有任何方法可以使用多个线程将数据写入多个文件(比如我有 4 个线程,每个线程同时写入 4 个文件)。你能建议我如何进行吗?关于如何有效地将数据流式传输到文件的任何提示? 提前致谢

【问题讨论】:

您可以访问并行文件系统吗?如果没有,那么就不要费心尝试并行化您的 IO... @Gilles 我不会再为此烦恼了:D 【参考方案1】:

这是一篇关于并发 I/O 主题的有趣文章: http://www.drdobbs.com/parallel/multithreaded-file-io/220300055

有一些基本障碍限制了这种方法的收益。第一是硬件能力。 HDD 和 SSD 的读取和写入速度有限,尝试同时读取/写入多个文件可能不会显着提高速度。事实上,在硬盘上尝试同时执行多项操作实际上会在许多情况下损害性能,这可以在我提供的链接的基准测试中看到。似乎使用 2-4 个线程可以在阅读中获得显着的收益,但写作规范令人失望。不过,多线程肯定会有助于加快数据的序列化。

【讨论】:

以上是关于是否可能:使用多个线程将输出流式传输到不同的文件/的主要内容,如果未能解决你的问题,请参考以下文章

将音频流式传输到多个 AirPlay 设备

Java - 将 JMS 消息流式传输到 Oracle 表中

是否可以将 python 子进程的输出实时流式传输到网页?

使用 Python 向 Google Cloud Storage 写入流式传输

将多个 TObject 流式传输到 TMemoryStream

将多个 mp3 文件流式传输到 Icecast