如何在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();
}
我知道我可以并行地读取缓冲区,但是写是瓶颈。有没有办法并行写入磁盘?我还能做些什么来提高我的表现吗?
感谢编辑:每个线程都在写一个不同的文件
这在很大程度上取决于你想要写入的数据。
写固定大小的数据,你可以把它分成四个块,每个线程在文件中寻找一个特定的位置并在那里写。注意,您需要四个不同的文件流对象,每个线程一个。
写入没有固定大小的数据(如任意文本)是不可能并行完成的。为此,您需要某种同步,以便一次只有一个线程写入。
而且,即使数据是固定大小的,如果数据是流的,不能分割成块,也可能不可能并行写入。
如果您希望所有线程都写入相同的文件,则使用上述方法。如果每个线程都写不同的文件,那么就没有问题。这与多个进程写入不同的文件没有什么不同。
相关文章:
- OpenMP for 循环并行性问题
- 如何在cython中使用并行性
- 如何在 Skylake 架构上最大化 sqrt-heavy loop 的指令级并行性?
- 在流水线执行中采用并行性
- C++17 在并行性方面究竟发生了哪些变化?(权威文档在哪里?
- OpenMP 按需嵌套并行性
- 通用 C++11 函数包装器,用于基于任务的并行性
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 互斥任务集的线程级并行性
- 使用TBB的并行性-我们的检查列表中应该包含哪些内容
- Xeon phi卸载模式如何利用线程并行性和矢量化
- 并行性与线程 - 性能
- 从基于线程的流水线转向基于任务的并行性?(C++)
- 编译包含动态并行性的代码失败
- std::async 使用相同的线程,我的代码没有实现并行性
- 内部和外部并行性
- 在cpp中运行计时器,与正在执行的程序并行
- 某些子网格未使用CUDA动态并行性执行
- 用STL算法替换for循环,同时允许并行性
- 如何在c++中实现向磁盘写入的程序的并行性?