Bien que la simplicité… il faut bien que le programmeur indique les bornes de la transaction.
La différence fondamentale :
verrous : approche pessimiste : quelqu'un va venir me faire chier pendant que je bosse, donc je protège
transaction : approche optimiste : si quelqu'un est venu m'emmerder, pas grave, je vais refaire après
Quand une ressource est partagée, 99,9% du temps, il n'y a pas de contention sur cette ressource. L'approche par verrou est pénalisante, car elle protège tout le temps, ce qui est assez coûteux en terme de performances : instruction atomique test-and-set, invalidation des caches de tous les processeurs, etc… Ce sont tous les accès à la ressource qui payent ce prix.
A contrario, l'approche par transaction a moins d'impact au global, car seuls les accès avec contentions payent le prix d'un rollback et d'une nouvelle transaction. Certes, c'est plus cher unitairement qu'un verrou, mais ça arrive beaucoup, beaucoup moins souvent.
[^] # Re: Exemple de gain avec la mémoire transactionnelle ?
Posté par ymorin . En réponse à la dépêche Sortie de la version 4.7 du compilateur GCC. Évalué à 10. Dernière modification le 23 mars 2012 à 06:52.
La différence fondamentale :
Quand une ressource est partagée, 99,9% du temps, il n'y a pas de contention sur cette ressource. L'approche par verrou est pénalisante, car elle protège tout le temps, ce qui est assez coûteux en terme de performances : instruction atomique
test-and-set, invalidation des caches de tous les processeurs, etc… Ce sont tous les accès à la ressource qui payent ce prix.A contrario, l'approche par transaction a moins d'impact au global, car seuls les accès avec contentions payent le prix d'un
rollbacket d'une nouvelle transaction. Certes, c'est plus cher unitairement qu'un verrou, mais ça arrive beaucoup, beaucoup moins souvent.Du moins, c'est l'idée.
Hop,
Moi.