私は、ディスクにできるだけ並行して書き込みたいいくつかのファイルを含むメインメモリにバッファを持っています。毎回異なる場所に読み書きします。 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();
}
私は並行して、バッファの読み取りを行うことができますことを知っているが、書き込みがボトルネックとなっています。ディスクへの書き込みを並列化する方法はありますか?より良いパフォーマンスを得るためにできることは他にありますか?
ありがとう
EDIT:すべてのスレッドが別のファイルに書き込みます。
OSは直接I/Oを実行していないので、OSはこれらの書き込みを最適化するようにチューニングして並べ替えます。これを改善するためにコードが多くなりません(パラレル同じファイルへの読み取り/書き込み)。 SSDディスクを使用するか、RAIDでディスクを設定しますか? – nos
回答を編集して、a)すべてのスレッドが同じファイルまたは別のファイルに書き込んでいるかどうかを指定してください。 b)もしそれらが同じファイルに書いているのであれば、各スレッドは書いているファイルのそれ自身の "領域"を持っていますか? –
@nosすでにSSDディスクを使用しています。したがって、異なるコアの異なるスレッドから同時にディスクに書き込む方法はありませんか? – mata