【问题标题】:Multi Threading for Reading/Writing a File in C++?用于在 C++ 中读取/写入文件的多线程?
【发布时间】:2013-03-14 00:19:18
【问题描述】:

我有一个关于 C++ 中 File 操作的非常基本的查询,如果这是一个非常愚蠢的问题,请原谅我。 在我的应用程序中,我有 read/write files 的函数。 我想知道是否有可能通过多线程处理来加速读/写操作。 我有这个疑问,因为CPU 可能性能更好,但硬盘可能性能更差。 我有以下情况: 1. 如果多个线程一次只进行读或写,而不是两者都进行怎么办? 2. 如果这里只考虑 1 个文件,即多个线程同时对同一个文件执行读/写,该怎么办? 3. 如果多个文件被多个线程读取/写入,只有一个线程负责一个文件怎么办? 4. 如果读写由2个不同的线程同时完成怎么办? 谢谢你

【问题讨论】:

    标签: c++ multithreading file


    【解决方案1】:

    多线程(和异步 i/o)是隐藏延迟的优化,而不是速度增强。多个线程同时访问单个文件可能不会让你得到太多。线程可以帮助您的地方是,如果您在等待文件操作完成时还有一些其他工作要做(可能是一些用户交互)。它在您的一项操作被阻塞的地方最有用(例如您正在等待来自键盘/鼠标的用户输入,或者正在等待数据或连接到达网络套接字。)例如,您可能有一个与每个套接字关联的线程。

    所以你的情况 3:

    如果多个文件被多个线程读取/写入会怎样? 只有 1 个线程负责一个文件?

    是我认为唯一有用的追求。然后只有当您确定在文件操作进行时还有其他事情需要做时。

    【讨论】:

    • “多线程(和异步 i/o)是吞吐量优化” -- 更准确地说,它们是纯粹的延迟隐藏优化,就像您在后面的文章中所写的那样段落(阻塞/等待操作完成)。吞吐量可能会增加,但通常不会增加,在某些情况下甚至会减少。
    • 好点。我已经编辑了我的答案以反映您的评论。谢谢!
    【解决方案2】:

    您可能会获得速度上的提升,但线程会带来很多开销。您需要确保正在加载大量数据,否则线程间通信的开销会杀死您。

    也就是说,使用各种异步文件 io 选项会好得多。它们大多是特定于平台的,但我相信 boost::asio 可以为你抽象出来......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-23
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多