32 votes

Multi-filetage

Je suis en train d'apprendre le multithreading en ce moment, en C#, mais comme pour tout apprentissage, j'aime apprendre les meilleures pratiques. Pour l'instant, le domaine semble flou. Je comprends les bases, et je peux créer des threads.

À quoi dois-je faire attention lors de la création d'applications multifilières ? Existe-t-il des règles fixes ou des meilleures pratiques à connaître ? Ou quelque chose à retenir afin d'éviter les dérapages ?

Merci pour les réponses.

33voto

Reed Copsey Points 315315

En plus de la Meilleures pratiques MSDN j'ajouterai :

  1. Ne créez pas vos propres fils de discussion. Préférez utiliser le ThreadPool (ou le nouveau Bibliothèque parallèle des tâches Tâches). Gérer son propre fil de discussion est rarement, voire jamais, la bonne décision de conception.
  2. Faites très attention aux questions liées à l'interface utilisateur. Control.Invoke (Windows Forms) et Dispatcher.Invoke (WPF), ou utiliser SynchronizationContext .actuel avec Post/Send
  3. Favoriser l'utilisation de la Classe BackgroundWorker le cas échéant.
  4. Essayez de réduire au minimum la synchronisation via les verrous.
  5. Assurez-vous de synchroniser tout ce qui nécessite une synchronisation.
  6. Favoriser les méthodes dans le Classe emboîtée lorsque cela est possible par rapport au verrouillage

Une fois que vous êtes plus avancé, et que vous essayez d'optimiser, d'autres choses à rechercher :

  1. Faites attention à faux partage . Ceci est particulièrement problématique lorsque l'on travaille avec des tableaux, puisque chaque écriture dans un tableau vers un élément quelconque d'un tableau inclut une vérification des limites dans .NET, ce qui provoque en fait un accès au tableau près de l'élément 0 (juste avant l'élément 0 en mémoire). Cela peut faire chuter les performances de façon spectaculaire.
  2. Attention aux problèmes de fermeture, en particulier lorsque vous travaillez dans des situations de bouclage. De vilains bogues peuvent se produire si vous fermez sur une variable dans la mauvaise portée lorsque vous créez un délégué.

9voto

Justin Niessner Points 144953

MSDN - Meilleures pratiques en matière de threading géré

Cet article de MSDN fait un excellent travail en abordant les zones dangereuses et en donnant les meilleures pratiques pour gérer/travailler autour de ces zones.

5voto

Austin Salonen Points 28057

Puisque je l'ai ouvert sur un autre onglet...

http://www.yoda.arachsys.com/csharp/threads/

Je n'en suis qu'à quelques chapitres, mais il a été écrit par Jon Skeet.

2voto

Frederik Gheysels Points 36354

Y a-t-il des choses que vous devriez savoir ? Certainement.

Dangers :

Un article utile et intéressant peut être trouvé aquí

2voto

Ed Power Points 3179

Je vous recommande vivement de commencer par digérer ceci : http:/ .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X