フォルダーを再帰的に検索し、多数のファイルをスキャンする単純な部分文字列検索プログラムを作成しました。このプログラムは、Boyer-Moore-Horspool アルゴリズムを使用しており、大量のデータを非常に効率的に解析できます。
プログラムへのリンク: http://pastebin.com/KqEMMMCT
私が今やろうとしているのは、それをさらに効率的にすることです。コードを見ると、3 つの異なるディレクトリが検索されていることがわかります。各ディレクトリを同時に検索するプロセス/スレッドを作成できるようにしたいと考えています。これにより、プログラムが大幅に高速化されます。
これを実装する最良の方法は何ですか? 私はいくつかの予備調査を行いましたが、私の実装は成功していません。それらは 25 分程度の処理後に停止するようです (現在、単一プロセス バージョンの実行には 24 時間近くかかります。大量のデータがあり、648 個の固有のキーワードがあります)。
マルチプロセッシング API を使用してさまざまな実験を行い、さまざまなファイルすべてを 3 つのファイル (ディレクトリごとに 1 つ) に凝縮し、mmap() を介してファイルをメモリにマッピングしましたが、a: これが適切なルートかどうかわかりません。 b: 私のプログラムはランダムなポイントで停止し続け、デバッグは絶対的な悪夢でした。
はい、大規模なグーグル検索を行いましたが、プール/スレッド/サブプロセス/マルチスレッド/マルチプロセッシングの間でかなり混乱しています。
私はあなたに私のプログラムを書くように頼んでいるわけではありません.解決策を実装するために必要な思考プロセスを理解するのを手伝ってください. ありがとうございました!
参考までに: プログラムを実行したら、コードをオープンソース化する予定です。これは非常に便利なスクリプトだと思います。オンラインで入手できるマルチプロセッシングの実世界での実装例は限られています。