Question

J'ai lu jusqu'à beaucoup sur la mémoire transactionnelle ces derniers temps. Il y a un peu de battage médiatique autour de TM, de sorte que beaucoup de gens sont enthousiastes à l'idée, et il ne fournit des solutions pour des problèmes douloureux avec verrouillage, mais vous voyez aussi régulièrement des plaintes:

  • Vous ne pouvez pas faire d'E / S
  • Vous devez écrire vos sections atomiques afin qu'ils puissent exécuter plusieurs fois (attention à vos variables locales!)
  • mémoire transactionnelle logicielle offre des performances médiocres
  • [Insérez ici votre animal bête noire]

Je comprends ces préoccupations: le plus souvent, vous trouverez des articles sur STMs qui fonctionnent uniquement sur certains matériel particulier qui prend en charge une opération atomique vraiment vraiment sympathique (comme LL / SC ), ou il doit être pris en charge par un compilateur imaginaire, ou il exige que tous les accès à la mémoire transactionnelle soit, il introduit des contraintes de type de style monade, etc. Et surtout:. ce sont des problèmes réels

Cette m'a conduit à me demander: ce qui parle contre l'utilisation locale de la mémoire transactionnelle en remplacement des serrures Serait-ce déjà apporter une valeur suffisante ou doit transactionnelles mémoire être utilisée dans tous les sens, si? tout simplement?

Était-ce utile?

La solution

Oui, quelques-uns des problèmes que vous évoquez peut être les vrais maintenant, mais les choses évoluent. Comme toute nouvelle technologie, d'abord il y a un battage médiatique, la nouvelle technologie montre qu'il ya des problèmes non résolus, et certains de ces problèmes sont résolus et d'autres pas. Ce résultat dans une autre possibilité de résoudre vos problèmes, pour lesquels cette technologie est plus adaptée.

Je dirai que vous pouvez utiliser STM pour une partie de votre application qui peut laisser avec les contraintes de l'état des courants de l'art ont. Une partie de l'application qui ne me dérange pas d'une perte d'efficacité par exemple.

La communication entre la transaction et des parties non transactionnels est le gros problème. Il y a STM qui sont au courant de verrouillage, de sorte que les peuvent interagir de manière cohérente avec les parties non transactionnels.

I / O est également possible, mais votre transaction devient irrévocable, qui est, ne peut pas être annulée. Cela signifie qu'une seule transaction peut utiliser E / S en même temps. Vous pouvez également utiliser E / S une fois la transaction de haut niveau a réussi, sur un monde non transactionnel, comme maintenant.

La plupart des systèmes de base bibliothèque STM forcer l'utilisateur à faire la différence entre les données transactionnelles et non transactionnelles. Alors oui, vous devez comprendre ce que cela signifie exactement. D'autre part, les statisticiens peuvent déduire ce que l'accès doit être transactionnel ou non, le problème est-il qu'ils peuvent être trop prudent, ce qui diminue l'efficacité que nous pouvons obtenir lorsque nous gérons de façon explicite les différents types de variables. Ceci est la même que celle ayant des variables statiques, locales et dynamiques. Vous devez connaître les contraintes chacun doivent faire un bon programme.

Autres conseils

  

J'ai lu jusqu'à beaucoup sur la mémoire transactionnelle ces derniers temps.

Vous pourriez également être intéressé par cette podcast sur le logiciel transactionnel mémoire, qui introduit également une analogie STM à l'aide basée sur la collecte des déchets:

  

Le document est d'environ une analogie entre la collecte des ordures et la mémoire transactionnelle.   En plus de voir la beauté de l'analogie, la discussion est également un bon   introduction à la mémoire transactionnelle (qui a été mentionné dans l'épisode Goetz / Holmes)   et - dans une certaine mesure -. à la collecte des ordures

Si vous utilisez la mémoire transactionnelle en remplacement des serrures, tout le code qui exécute avec ce verrou pourrait être tenue annulée à la fin. Ainsi, le code qui utilisait auparavant des verrous doit être transactionnel, et aura tous les mêmes inconvénients (et avantages).

Ainsi, vous pourriez peut-être limiter l'influence de TM uniquement les parties du code qui détiennent des verrous, non? Chaque morceau de code qui peut être appelé lors d'un verrou détenu doit prendre en charge TM, dans ce scénario. Combien de votre programme ne tient pas les verrous et est jamais appelé par le code qui détient les verrous?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top