ホームページ > バックエンド開発 > C++ > C# でメッセージを処理するときに並列処理を制限するにはどうすればよいですか?

C# でメッセージを処理するときに並列処理を制限するにはどうすればよいですか?

DDD
リリース: 2024-12-30 17:55:10
オリジナル
765 人が閲覧しました

How Can I Limit Parallelism When Processing Messages in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート