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

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

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

这是我的代码:

#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();
}

我知道我可以并行读取缓冲区,但写入是瓶颈。有没有办法并行写入磁盘?我还能做些什么来获得更好的性能吗?

谢谢

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

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

写入固定大小的数据,您可以将其分成四个块,每个线程查找文件中的特定位置并写入。请注意,您需要四个不同的文件流对象,每个线程一个。

无法并行写入没有固定大小的数据,例如任意文本。为此,您需要某种同步,因此一次只有一个线程写入。

此外,即使数据是固定大小,如果数据是流式的并且不能拆分成块,也可能无法并行写入。


以上是如果你想让所有的线程都写入同一个文件。如果每个线程都写入不同的文件,那没问题。这与多个进程写入不同文件没有什么不同。