J'ai une attente sans mise en œuvre pour les arbres binaires de recherche, mais je ne suis pas en mesure de comprendre les méthodes concrètes pour mesurer les conflits de fil. Par contention, je veux dire ici le nombre de threads qui tentent d'accéder au même morceau de mémoire en même temps.Mesure contention dans l'attente sans programmes Java multi-thread
Jusqu'à présent, j'ai recherché la classe ThreadMXBean et ThreadInfo, mais comme il n'y a pas de serrures en cause, je n'ai pas encore trouvé de solution.
Il suffit de regarder combien de temps processeur est utilisé par la méthode effectuant la mise à jour simultanée. Sans contention, un CAS ne prend presque pas de temps ... – Holger
J'ai mesuré le temps processeur par thread, mais cela ne semble pas me donner une idée de la contention. Mais votre commentaire m'amène à une manière intéressante de mesurer la contention. La différence entre le temps CPU maximum et minimum devrait me donner une idée du délai qui est invariablement dû à la contention! – grillSandwich
Le point clé des algorithmes * lock free * (alias * wait free *) est qu'ils n'incluent pas les opérations d'attente. La seule chose qui peut arriver est qu'une opération de mise à jour doit être répétée car une mise à jour simultanée a interféré la mise à jour. La répétition, comme toute autre opération, consomme 100% du temps CPU. La seule façon de mesurer la contention ici est de mesurer le nombre de répétitions. À moins que les enregistrements d'implémentation de l'algorithme ne se répètent, vous devez mesurer le temps CPU de l'opération de mise à jour (qui augmentera lors de la contention) et le comparer au temps d'exécution global du thread. – Holger