web-dev-qa-db-fra.com

Modèles de conception pour le multithreading

Le multitâche semble être une catastrophe à certains moments où de gros projets se bloquent en raison d'une mutation partagée de Je dirais que les ressources partagées sont accessibles par plusieurs threads. Il devient très difficile de déboguer et de retracer l'origine du bogue et sa cause. Cela m'a fait demander: existe-t-il des modèles de conception pouvant être utilisés lors de la conception de programmes multithreaded?

J'apprécierais vraiment vos points de vue et vos commentaires à ce sujet et si quelqu'un peut présenter de bonnes pratiques de conception qui peuvent être suivies pour sécuriser notre fil de programme, ce sera d'une grande aide.

21
Ankit Zalani

Le lien @WYSIWYG semble avoir une multitude de modèles utiles, mais je peux vous donner quelques directives à suivre. La principale source de problèmes avec les programmes multithread est les opérations de mise à jour ou la modification simultanée et certains des problèmes les moins courants sont la famine, les blocages, etc. qui sont plus mortels si je peux dire, afin d'éviter ces situations, vous pouvez:

  • Utilisez le modèle Immutable Object , si un objet ne peut pas être modifié après la création, vous ne pouvez pas avoir de mises à jour non coordonnées et comme nous le savons, l'opération de création elle-même est garantie d'être atomique par la JVM dans ton cas.
  • Command Query Segregation Principle : c'est un code distinct qui modifie l'objet à partir du code qui les lit car la lecture peut avoir lieu simultanément mais pas la modification.
  • Profitez énormément des fonctionnalités de langue et de bibliothèque que vous utilisez, telles que les listes simultanées et les structures de thread, car elles sont bien conçues et offrent de bonnes performances.
  • Il y a un livre (bien qu'un ancien) mais avec de très bonnes conceptions pour de tels systèmes, il s'appelle Programmation simultanée en Java =.
9
Ibrahim Najjar

Les modèles de conception sont utilisés pour résoudre un problème spécifique. Si vous voulez éviter les blocages et augmenter le débogage, il y a des choses à faire et à ne pas faire

  1. Bibliothèque utilisateur thread-safe. .Net Java, C++ ont leurs propres bibliothèques thread-safe. Utilise les. N'essayez pas de créer vos propres structures de données.

  2. Si vous utilisez .Net, essayez Task au lieu de threads. Ils sont plus logiques et sûrs.

Vous voudrez peut-être consulter la liste de certains modèles liés à la concurrence

http://www.cs.wustl.edu/~schmidt/patterns-ace.html

1
om471987