Nous concevons actuellement une application serveur multithread. Pour optimiser les performances, nous avons décidé d'implémenter un ReadWriteLock, c'est-à-dire que plusieurs threads peuvent obtenir un verrou s'ils veulent uniquement lire mais qu'un seul thread peut contenir le verrou en écriture.Mauvaise équité avec un ReadWriteLock/SharedLock sous charge
Ce verrou est utilisé avec une liste et l'itération sur la liste est l'opération de "lecture".
Maintenant, ce changement de mutex simple a effectivement augmenté les performances mais seulement à un certain niveau de concurrence. S'il y a plus de threads, ceux qui attendent le verrou en écriture, meurent de faim car avant qu'un itérateur ne se déverrouille, un autre itérateur se verrouille souvent déjà.
Toute idée/approche par défaut pour fournir plus d'équité aux threads voulant changer la liste tout en obtenant de meilleures performances?
Salut, nous avons pensé à quelque chose comme MVCC mais je ne pouvais pas le nommer. Je vous remercie. La stratégie de la carte de hachage est plus facile si vous avez un espace de hachage, pas avec une liste ordonnée comme nous utilisons maintenant. Des algorithmes optimistes sans verrouillage sont une option, je suis d'accord, mais comme vous l'avez dit, nous voulions éviter la mise en œuvre difficile. – Tarnschaf