Maison > développement back-end > C++ > Comment puis-je limiter le parallélisme lors du traitement des messages en C# ?

Comment puis-je limiter le parallélisme lors du traitement des messages en C# ?

DDD
Libérer: 2024-12-30 17:55:10
original
764 Les gens l'ont consulté

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

Limiter le parallélisme maximum dans le traitement des messages avec C#

Lors du traitement d'une grande collection d'éléments en parallèle, il est souvent souhaitable de contrôler le nombre maximum de tâches pouvant être exécutées simultanément. Cela permet d'optimiser l'utilisation des ressources et d'éviter de surcharger le système.

À l'aide de l'exemple de code fourni, qui parcourt une collection de 1 000 messages d'entrée et démarre une tâche pour chacun, il est difficile de prédire le nombre exact de messages qui seront être traités en parallèle. Cependant, sur un processeur quad-core typique, plusieurs messages seront probablement traités simultanément.

Limitation du parallélisme maximum

Pour limiter le nombre maximum de messages traités à la fois , la méthode Parallel.ForEach avec l'option MaxDegreeOfParallelism peut être utilisée. Cette option spécifie le nombre maximum de threads pouvant être utilisés pour une exécution parallèle. Par exemple, le code ci-dessous limite le nombre de tâches parallèles à 10 :

Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10 },
msg =>
{
    // logic
    Process(msg);
});
Copier après la connexion

Maintaining Sequence

Dans le code ci-dessus, les messages ne sont pas nécessairement traités dans le même ordre dans lequel ils apparaissent dans la collection. Pour garantir une séquence stricte, la méthode d'extension AsParallel peut être utilisée :

var orderedMessages = messages.AsParallel();
Parallel.For(0, orderedMessages.Count(), i =>
{
    Process(orderedMessages[i]);
});
Copier après la connexion

Dans ce code, la méthode Parallel.For crée une boucle qui itère sur la collection en parallèle, mais au sein de chaque itération, le message étant traité est accessible de manière séquentielle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal