一部の光学メディアからデータをロードするツールがあり、データがすべてハード ドライブにコピーされると、処理のためにサードパーティ ツールを実行します。このプロセスを最適化して、各ファイルが読み込まれたときに処理されるようにしたいと考えています。問題は、サードパーティ製ツール (もちろん変更できません) には 12 秒の起動オーバーヘッドがあることです。プロセス全体をできるだけ早く完了するという点で、これに対処できる最善の方法は何ですか? 実行ごとに任意の数のファイルを処理ツールに渡すことができるため、ツールを実行するタイミングを正確に判断して、全体的に最速の結果を得ることができる必要があります。コピーされるデータは、1 つの大きなファイル (完全にコピーされるまで処理できない) から、何百もの小さなファイルまで、さまざまな可能性があります。
1 に答える
最も簡単な方法は、ツールを実行するスレッドとデータをロードするスレッドの 2 つのスレッドを作成して実行することです。12 秒のタイマーを開始し、両方のスレッドをトリガーします。ファイルのロードが完了するたびに、経過時間を確認します。12 秒経過したら、ツールを実行しているスレッドにデータをフェッチします。前のバルクの処理と並行して、データのロードを再開します。以前の一括処理が完了したら、12 秒のタイマーを再起動し、ファイルの読み込みが完了するたびにチェックを続けます。データがなくなるまで繰り返します。
より良い結果を得るには、より複雑なソリューションが必要になる場合があります。ベンチマークを実行して、平均データ読み込み時間の評価を取得できます。小さいファイルと大きいファイルでは異なる場合があるため、ファイルのカテゴリごとに (サイズに応じて) いくつかの評価が必要になる場合があります。最適なリソース使用率は、新しいデータが到着するのと同じ速度でデータを処理するものです。処理時間には 12 秒の起動時間が含まれます。ベンチマークでは、処理スレッド数と読み取りスレッド数の比率が得られます (受信ファイルのサイズに応じて、アクティブな読み取りスレッドの数を増減することもできます)。実際、これは複数の生産者と消費者による生産者と消費者の問題の一種です。