私はマルチスレッドアプリケーションを書いていますが、今のところこの考えがあります。実行時に決定される数値はどこFILE*[n]
にありますか。n
すべての n 個のファイルを読み取り用に開くと、複数のスレッドがアクセスして読み取ることができます。各ファイルのデータの計算は同等です。つまり、シリアル実行が想定されている場合、各ファイルは同じ時間メモリに残ります。
各ファイルは任意に大きくなる可能性があるため、メモリにロードできると想定しないでください。
このようなシナリオでは、発生するディスク IO の数を減らしたいと考えています。誰かがそのようなシナリオの共有メモリモデルを提案できれば素晴らしいと思います(物事がどのように実装されているかがほとんどわからないため、共有メモリモデルを使用しているかどうかはわかりません)。どうすればこれを達成できるかわかりません。言い換えれば、そのようなシナリオを実装するための最も効率的なモデルは何かを知りたいだけです。を使用してC
います。
編集: より詳細なシナリオ。
実際の問題は、n 個のファイルに含まれるデータに対して n 個のブルーム フィルターがあり、ファイルのすべての要素が対応するブルーム フィルターに挿入されたら、メンバーシップ テストを行う必要があることです。メンバーシップ テストはデータ ファイルの読み取り専用プロセスであるため、複数のスレッドからファイルを読み取ることができ、この問題は簡単に並列化できます。現在、データを含むファイルの数はかなり多い (約 20k であり、ファイルの数はブルーム フィルターの数に等しいことに注意してください) ため、ブルーム フィルターに対してテストするためのスレッドを生成することを選択します。つまり、各ブルーム フィルターには独自のスレッドがあり、他のすべてのファイルを 1 つずつ読み取り、ブルーム フィルターに対してデータのメンバーシップをテストします。そのような場合にディスク IO を最小限に抑えたいと考えています。