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); });
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]); });
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!