驚異的並列化可能なタスクを多数実行する必要がある問題に取り組んでいます。タスクはデータベースからデータを読み取ることによって作成されますが、すべてのタスクのコレクションはマシン上のメモリの量を超えるため、タスクを作成、処理、および破棄する必要があります。この問題を解決するための良いアプローチは何でしょうか?私は次の2つのアプローチを考えています。
同期されたタスクキューを実装します。データベースからデータを読み取り、タスクをキューに入れるプロデューサー(タスククリエーター)を実装します(メモリの量を超えないように、現在キューにあるタスクの数を一定の値に制限します)。キューからタスクを読み取り、タスクを処理し、結果を保存してタスクを破棄する複数のコンシューマープロセス(タスクプロセッサ)を用意します。このアプローチでは、消費者プロセスの数はどれくらいになるでしょうか。
.NET Parallel拡張機能(PLINQまたはparallel for)を使用しますが、タスクのコレクションを作成する必要があることを理解しています(Parallel forで処理しているときに、コレクションにタスクを追加できますか?)。したがって、タスクのバッチを作成します。たとえば、一度にN個のタスクを作成し、これらのタスクのバッチを処理して、別のN個のタスクを読み取ります。
これら2つのアプローチについてどう思いますか?