gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:02:19 26 4
gpt4 key购买 nike

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

这是我的代码:

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

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

谢谢

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

最佳答案

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

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

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

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


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

关于c++ - 如何在用 C++ 写入磁盘的程序中实现并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com