首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现文件读写并行化

如何实现文件读写并行化
EN

Stack Overflow用户
提问于 2010-01-03 10:09:45
回答 3查看 16K关注 0票数 10

我有一个程序,从2个文本文件读取数据,然后将结果保存到另一个文件。由于有许多数据需要读取和写入,这会对性能造成影响,因此我希望并行读取和写入操作。

我最初的想法是,以两个线程为例,一个线程从开头读/写,另一个线程从文件中间读/写。由于我的文件格式化为行,而不是字节(每行可能有不同的数据字节),因此按字节查找对我不起作用。我能想到的解决方案是使用getline()先跳过前面的行,这可能效率不高。

有没有什么好方法可以在文件中查找到指定的行?或者你有没有其他的想法来并行文件读写?

环境: Win32、C++、NTFS、单硬盘

谢谢。

-Dbger

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-03 10:12:11

一般来说,您不希望将磁盘I/O并行化。硬盘不喜欢随机I/O,因为它们必须不断地寻找数据。假设您没有使用RAID,并且您使用的是硬盘驱动器,而不是一些固态内存,那么如果您将I/O并行化,您将会看到严重的性能下降(即使使用这样的技术,在执行大量随机I/O时,您仍然会看到一些性能下降)。

要回答您的第二个问题,确实没有一种好方法可以查找文件中的某一行;您只能使用read函数显式查找字节偏移量(有关如何使用它的更多详细信息,请参阅this page

票数 21
EN

Stack Overflow用户

发布于 2010-01-04 01:53:56

当您在一个磁盘上运行时,将多个读和写进行排队不会有任何帮助。如果您的应用程序也在CPU中执行了大量工作,那么您可以异步地进行读写,让CPU在后台执行磁盘I/O。或者,购买第二个物理硬盘:从一个硬盘中读取,向另一个中写入。对于中等规模的数据集,这通常是有效的,而且比编写代码便宜得多。

票数 3
EN

Stack Overflow用户

发布于 2010-01-04 00:57:17

这并不是对你问题的真正回答,而是一种重新设计(我们都讨厌但又忍不住要这么做)。如前所述,尝试使用多线程来加速硬盘上的I/O可能不会有什么帮助。

然而,根据数据敏感度、吞吐量需求、数据大小等,可以使用另一种方法。在内存中创建一个结构来维护数据的图片并允许轻松/快速地更新数据中任何位置的文本行并不困难。然后,您可以使用一个专门的线程来简单地监视该结构,并将数据写入磁盘。按顺序将数据写入磁盘可能非常快;它可能比随机查找不同部分并将其分片写入要快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1993699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档