如何在c++中实现向磁盘写入的程序的并行性?

How can I achieve parallelism in a program that is writing to the disk in C++?

本文关键字:程序 并行性 磁盘 c++ 实现      更新时间:2023-10-16

我在主存中有一个缓冲区,其中包含几个我想并行(如果可能的话?)写入磁盘的文件。我每次读和写到不同的位置。

这是我的代码:

#include <thread>
void t1(){//read from the buffer and writes the 1st file to the disk }
void t2(){//same with the second one }
void t3(){//3rd}
void t4(){//4th}
int main(){
  std::thread thread1(t1);
  std::thread thread2(t2);
  std::thread thread3(t3);
  std::thread thread4(t4);
  t1.join();
  t2.join();
  t3.join();
  t4.join();
}

我知道我可以并行地读取缓冲区,但是写是瓶颈。有没有办法并行写入磁盘?我还能做些什么来提高我的表现吗?

感谢

编辑:每个线程都在写一个不同的文件

这在很大程度上取决于你想要写入的数据。

写固定大小的数据,你可以把它分成四个块,每个线程在文件中寻找一个特定的位置并在那里写。注意,您需要四个不同的文件流对象,每个线程一个。

写入没有固定大小的数据(如任意文本)是不可能并行完成的。为此,您需要某种同步,以便一次只有一个线程写入。

而且,即使数据是固定大小的,如果数据是流的,不能分割成块,也可能不可能并行写入。


如果您希望所有线程都写入相同的文件,则使用上述方法。如果每个线程都写不同的文件,那么就没有问题。这与多个进程写入不同的文件没有什么不同。