私はいくつかのファイルを分割しています。ファイルのすべての行を(逐次的かつ独立して)処理したいと思います。マルチスレッディングの最良の方法は、ファイル数の行を処理する
私はramのバッファにファイルの大きな塊を読み込むコードを書いていました。そして、マルチスレッドはバッファから行を読み込み、それらを処理するために競合します。擬似コードは以下の通りである:
do{
do{
fread(buffer,500MB,1,file);
// creating threads
// let the threads compete to read from buffer and PROCESS independently
// end of threads
while(EOF not reached)
file = nextfile;
while(there is another file to read)
またはこのいずれか
void mt_ReadAndProcess(){
lock();
fread(buffer,50MB,1,file);
if(EOF reached)
file = nextfile;
unlock();
process();
}
main(){
// create multi threads
// call mt_ReadAndProcess() with multi threads
}
処理(タイムリー)高価なプロセスです。
これを行うにはもっと良い方法はありますか?ファイルをより速く読み取るか、マルチスレッドで処理する方が良いでしょうか?
ありがとうすべて、
Ameer。
あなたは正しいです。スレッドを自分自身で読み取らせる方がよいでしょう。私の2番目の例で私は同じ考えを持っています..各スレッドは、ファイルのブロックを自分のバッファに読み込みます。この場合、速度に問題があるかどうか教えてください。それとも良いアイデアはありますか? – ameerosein
*次の記事で確認できるように、fread()を使って一度に大きなブロック(またはチャンク)を読むと、そのチャンクを1行ずつ読み込むよりも高速です!*本当ですか?あなたは、あなたのオペレーティングシステムライブラリを書いた開発者と同じくらい速くて信頼できるコードを書くことができると思いますか?テキストファイルを別々の行に分割するコードをより速く書くことができると思いますか? 'fread()'が実際にどのようにデータを読み込むのか知っていますか? 'fread()'への呼び出しは、実際の 'read()'システム呼び出しにどのように変換されますか? –
あなたはそれをテストするための簡単なコードを書くことができます、一度にファイル全体を読んで、それを行ごとに読む! – ameerosein