J'aimerais que vous m'expliquiez de manière simple comment fonctionne le motif de perturbateur. Ce concept m'a été difficile à comprendre.
Peut-être qu'avec votre aide je pourrais le comprendre.
java
design-patterns
multithreading
real-time
chrisapotek
la source
la source
Réponses:
The Fowler Article fournit un bon guide, et cette explication:
Une approche plus conventionnelle pourrait utiliser une file d'attente de production et une file d'attente de consommateur, chacune utilisant des verrous comme mécanismes d'accès simultané. En pratique, ce qui se passe avec les files d'attente de producteurs et de consommateurs, c'est que ces dernières sont soit complètement vides, soit complètement pleines la plupart du temps, ce qui provoque des conflits de verrous et des cycles d'horloge inutiles. Le perturbateur atténue cela, en partie, en faisant en sorte que tous les producteurs et consommateurs utilisent le même mécanisme de file d'attente, se coordonnant les uns avec les autres en surveillant les compteurs de séquence plutôt qu'en utilisant des mécanismes de verrouillage.
la source
De cet article sur CoralQueue :
Les producteurs et les consommateurs ne se chevauchent donc pas à l'intérieur du réseau circulaire en vérifiant leurs séquences correspondantes . Et pour communiquer leurs séquences dans les deux sens, ils utilisent des barrières de mémoire au lieu de verrous. C'est le moyen le plus rapide sans verrouillage de communiquer.
Heureusement, vous n'avez pas besoin de vous attaquer aux détails internes du modèle de disjoncteur pour l'utiliser. Outre l'implémentation LMAX, CoralQueue a été développé par Coral Blocks, auquel je suis affilié. Certaines personnes trouvent plus facile de comprendre un concept en lisant du code. Vous trouverez ci-dessous un exemple simple de producteur qui envoie des messages à un seul consommateur. Vous pouvez également vérifier cette question pour un exemple de démultiplexeur (un producteur à plusieurs consommateurs).
Disclaimer: Je suis l'un des développeurs de CoralQueue.
la source