これは、TPL(Task Parallel Library)で処理するのが簡単です。これは、TPLが4つの未満の同時スレッドを実行することを決定する可能性があることを
ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = 4 };
Parallel.ForEach(accounts, options, a =>
{
ProcessAccount(a);
});
http://msdn.microsoft.com/en-us/library/dd782721.aspx
ノートのようなものに見えるだろうが、指定されたオプションに基づいて、4つ以上を実行しません。たとえば、提供されたlamda(ProcessAccountを呼び出す)がCPUにバインドされており、システムに4つ未満のCPUコアがあると判断した場合などです。一般に、特に.NET 4.5では、TPLは使用するスレッドの数を非常に適切に判断します。
コメントに@Servyが書いているように、コードを4つのスレッドに制限する非常に特別な理由がない限り、TPLが単独で使用するスレッドの数を並べ替えることをお勧めします。そうすれば、2018年に同じコードが128コアプロセッサ上で実行されている場合、他のものに移行しても、128コアをすべて自由に使用できます)。
を - これが最も可能性の高いコンソールアプリケーションから実行されます。 – AWeim
'ProcessAccount'の依存関係は何ですか?これは計算上の操作かI/O境界操作ですか? –
ブライアンはそこに良い点があります、あなたはリストに言及して、そのリストです?ディスクからデータを読み込む必要がある場合や、リモートサービスなどを呼び出す必要がある場合は、必要なすべてのデータをメモリに格納しておく必要があります。まず、ボトルネックを特定する必要があります。 –
gjvdkamp