Amélioration de l'accès simultané aux objets grâce au verrouillage asynchrone par clé
Cet article aborde le verrouillage simultané d'objets à l'aide de clés d'URL hachées dans la bibliothèque ImageProcessor. La bibliothèque rencontre des erreurs intermittentes d’accès aux fichiers lors des mises à jour du cache. Une classe AsyncDuplicateLock
personnalisée, conçue pour le verrouillage asynchrone par clé, s'est avérée insuffisante.
Analyse de la AsyncDuplicateLock
Classe
La classe AsyncDuplicateLock
fournit des méthodes de verrouillage synchrone (Lock
) et asynchrone (LockAsync
). Les deux utilisent une clé pour identifier l'objet verrouillé.
Mécanisme de verrouillage
Le processus de verrouillage implique ces étapes basées sur des clés :
Wait
(synchrone) ou WaitAsync
(asynchrone) est appelé pour acquérir le verrou.Release
(synchrone) ou de manière asynchrone.Identifier le problème
Le défaut du code d'origine réside dans la suppression prématurée des instances SemaphoreSlim
du ConcurrentDictionary
. Cette suppression prématurée, avant la sortie du sémaphore, entraîne plusieurs sémaphores associés à la même clé, entraînant des erreurs d'ajout de cache.
Mise en œuvre améliorée
Notre solution introduit un décompte de références pour chaque sémaphore du dictionnaire. Un seul verrou garantit la décrémentation atomique et la suppression des comptes de référence. Cette approche améliorée offre un verrouillage robuste et évite l'erreur précédente.
Cette implémentation améliorée permet un verrouillage asynchrone fiable basé sur une clé, minimisant les erreurs de cache et garantissant le bon fonctionnement de la bibliothèque ImageProcessor.
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!