快速读/写大数据

时间:2013-11-29 05:25:58

标签: c++ multithreading

我正在使用单线程在GB中备份VHD。我想减少用c ++读/写的时间。现在我想使用多个线程,每个线程将读取一个perticuler块并在输出文件中的相同位置写入没有线程将在同一位置写入。 我已经使用多个std::ifstream使用多个线程读取文件的第一部分,现在我想减少写入时间,但我无法使用多个std::ofstream,使用单ofstream & Mutex我是没有像我期望的那样得到好结果...... Plz帮助......

1 个答案:

答案 0 :(得分:2)

最有可能的原因是你在使用ofstream时遇到错误是因为你打开文件进行独占访问。如果您希望将多个编写器写入单个文件,则必须指定文件共享选项。

使用多个读写线程不会加快速度。你的瓶颈是磁盘,它一次只能做一件事。使用多个线程实际上会减慢你的速度,因为会有不必要的磁盘搜索。

为什么编写C ++程序来进行VHD备份有点神秘。您可以使用COPY或ROBOCOPY或下载并使用Fastcopy,这是我在Windows上使用的最快的文件复制程序。

如果你真的想编写自己的复制程序,可以用两个线程来完成:一个用于读取,另一个用于写入。它的工作原理如下:

Read the first block
while not end of input
    Make an asynchronous call to start writing the block
    Read the next block
    wait for the asynchronous write to complete
end

请注意,如果输入和输出文件都在同一物理磁盘上,则不会提高性能。如果源和目标位于同一个驱动器上,那么多个线程根本无法帮助您。