C# を使用したメッセージ処理における最大並列処理の制限
項目の大規模なコレクションを並列処理する場合、最大数を制御することが望ましいことがよくあります。同時に実行できるタスクの数。これは、リソースの使用率を最適化し、システムの過負荷を防ぐのに役立ちます。
提供されたサンプル コードを使用すると、1,000 個の入力メッセージのコレクションをループし、それぞれに対してタスクを開始しますが、送信されるメッセージの正確な数を予測することは困難です。並行して処理されます。ただし、一般的なクアッドコア プロセッサでは、複数のメッセージが同時に処理される可能性があります。
最大並列処理の制限
一度に処理されるメッセージの最大数を制限するにはの場合は、MaxDegreeOfParallelism オプションを指定した Parallel.ForEach メソッドを使用できます。このオプションは、並列実行に使用できるスレッドの最大数を指定します。たとえば、以下のコードは並列タスクの数を 10 に制限します:
Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10 }, msg => { // logic Process(msg); });
Maintaining Sequence
上記のコードでは、メッセージが必ずしも処理されるとは限りません。コレクション内に表示されるのと同じ順序で表示されます。厳密な順序を確保するには、AsParallel 拡張メソッドを使用できます。
var orderedMessages = messages.AsParallel(); Parallel.For(0, orderedMessages.Count(), i => { Process(orderedMessages[i]); });
このコードでは、Parallel.For メソッドがコレクションを並列で反復するループを作成しますが、各反復内でメッセージは次のようになります。処理されたものは順次アクセスされます。
以上がC# でメッセージを処理するときに並列処理を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。