Maison > Article > développement back-end > Les barrières de mémoire accélèrent-elles les opérations atomiques dans une file d'attente producteur-consommateur ?
Une barrière mémoire améliore-t-elle la visibilité, la rapidité des opérations atomiques en plus de garantir leur ordre d'exécution ?
Dans le contexte d'un producteur-consommateur file d'attente, il arrive souvent que les données stockées par le producteur soient destinées à être visibles par le consommateur le plus rapidement possible. On pourrait se demander si l'ajout d'une barrière de mémoire matérielle entre l'opération de magasin du producteur et l'opération de chargement du consommateur aiderait à atteindre cet objectif.
Cependant, l'ajout d'une barrière de mémoire n'a pas d'impact significatif sur la latence des opérations atomiques dans un environnement multi- système de base. La raison en est que le matériel assure déjà la visibilité du fonctionnement du magasin sur tous les autres cœurs, qu'une barrière de mémoire soit présente ou non.
Que se passe-t-il sans barrière ?
En l'absence de clôture, le fonctionnement du magasin du producteur avec une commande de mémoire de version est garanti pour devenir visible par tous les autres noyaux à un moment donné dans le futur. Sur les architectures x86, aucune barrière matérielle n'est présente, tandis que sur les architectures ARM, des clôtures sont placées avant l'opération de magasin (côté producteur) et après l'opération de chargement (côté consommateur).
Même si aucune des clôtures matérielles sont utilisées dans le cas de x86, la valeur stockée par le producteur sans clôture sera éventuellement observée par l'opération de chargement sans clôture. Ce processus peut nécessiter quelques tentatives de chargement infructueuses, mais il finira par réussir.
Effets des barrières de mémoire sur la latence
L'ajout d'une barrière de mémoire ne réduit généralement pas la latence d'observation de la valeur stockée pour les raisons suivantes :
Conclusion
Dans la plupart des cas, l'ajout d'une barrière de mémoire inutile entre les opérations atomiques dans une file d'attente producteur-consommateur n'améliore pas la latence. Le matériel garantit déjà la visibilité des opérations atomiques sans avoir besoin de barrières de mémoire explicites. Le profilage est essentiel pour identifier les situations dans lesquelles une barrière de mémoire est bénéfique, et il ne doit être utilisé que lorsque cela est nécessaire.
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!