web-dev-qa-db-fra.com

Exemple de meilleure file d'attente de threads / meilleures pratiques

J'ai des données qui doivent être exécutées sur un certain thread d'arrière-plan. J'ai du code provenant de tous les autres threads qui doivent appeler cela. Quelqu'un a-t-il un bon didacticiel ou une meilleure pratique pour avoir une file d'attente de synchronisation pour prendre en charge cette exigence de thread

34
leora

Vous pouvez soit:

9
VonC

Découvrez Threading in C # , par Joseph Albahari, référence très complète sur le multithreading. Il couvre notamment files d'attente producteurs/consommateurs .

33
Mauricio Scheffer

Ceci est un article intéressant sur ThreadPools:

http://www.codeproject.com/KB/threads/smartthreadpool.aspx

Pour des cas d'utilisation plus simples, vous pouvez également utiliser la propre classe ThreadPool de .Net.

5
Dirk Vollmar

Une de mes solutions préférées à ce problème est similaire au modèle producer/consumer.

Je crée un thread principal (à peu près Main() de mon programme) qui contient un objet de file d'attente de blocage.

Ce thread principal dérive plusieurs threads de travail qui font simplement sortir les choses du thread de blocage central et les traitent. Puisqu'il s'agit d'une file d'attente de blocage threadsafe, les bits de synchronisation sont faciles - l'appel TaskQueue.Dequeue() se bloquera jusqu'à ce qu'une tâche soit mise en file d'attente par le thread producteur/principal.

Vous pouvez gérer dynamiquement le nombre de travailleurs que vous souhaitez ou le corriger en fonction d'une variable de configuration - car ils ne font que sortir des choses de la file d'attente, le nombre de travailleurs n'ajoute aucune complexité.

Dans mon cas, j'ai un service qui traite plusieurs types différents de tasks. J'ai la file d'attente tapée pour gérer quelque chose de générique comme TaskQueueTask. Ensuite, je sous-classe cela et remplace la méthode Execute().


J'ai également essayé l'approche .NET threadpool où vous pouvez jeter des choses dans le pool très facilement. Il était extrêmement simple à utiliser mais fournissait également peu de contrôle et aucune garantie d'ordre d'exécution, de synchronisation, etc. Il est recommandé uniquement pour les tâches légères.

1
Michael Haren

Vous pouvez essayer cette solution. Il vous montre comment mettre en œuvre le modèle producteur-consommateur. A également quelques explications sur ce qui peut être fait avec. Comme différentes combinaisons du nombre de producteurs et de consommateurs.

http://devpinoy.org/blogs/jakelite/archive/2009/01/12/threading-patterns-the-producer-consumer-pattern.aspx

http://devpinoy.org/blogs/jakelite/archive/2009/02/03/threading-patterns-producer-consumer-pattern-examples.aspx

0
jake.stateresa