Quels algorithmes sont utilisés dans Clojure, Haskell (et autres langues) pour STM?
-
28-09-2019 - |
Question
Si je comprends bien, il y a plusieurs algorithmes différents pour la mise en œuvre du logiciel Memory Transactionnelle (ce qui est un domaine de recherche très actif). Où puis-je trouver (sans avoir à plonger dans le code source) qui sont utilisés dans différentes langues et libraryes, en particulier dans Clojure et Haskell (GHC)?
La solution
La ressource ultime sur la STM Clojure - en dehors du code lui-même - est le Software l'article de Mark Volkmann de mémoire transactionnelles.
Il présente un bref aperçu de haut niveau de STM-la-approche (par rapport à d'autres approches de la concurrence), résume les différents concurrency fonctionnalités disponibles dans Clojure, puis plongées dans la STM Clojure, décrivant exactement ce qui se passe lors d'une transaction et, finalement, aller jusqu'au niveau des classes individuelles impliquées. En plus d'offrir beaucoup d'informations dur sur le fonctionnement interne de la machine STM Clojure, il contient un bon nombre de remarques très pertinentes relatives aux caractéristiques orientées de concurrence-de Clojure car ils sont utilisés dans les programmes idiomatiques de Clojure.
Le point d'entrée réel aux ressources STM Mark est cette page , avec actuellement des diapositives de la STM en plus du lien vers la dernière version du principal article de la STM.
Autres conseils
A un très haut niveau, une chose qui est intéressant au sujet de la mise en œuvre de Clojure de STM, est qu'il est très différent de toutes les autres implémentations. Rich a regardé beaucoup plus vers les bases de données réelles de haute performance dans le monde réel que des documents universitaires sur hypothétiques STMs. Par exemple, STM Clojure est à ma connaissance le seul STM qui utilise plusieurs Version Contrôle d'accès simultané (MVCC), qui est une technique bien connue dans le monde de base de données (en fait, il y a base de données assez sérieux bien pas là-bas, qui ne pas utilisation MVCC) mais il est à peu près pas discuté du tout dans le monde de la STM.
Voir http://www.haskell.org/haskellwiki/Software_transactional_memory pour Haskell (et GHC), et http://clojure.org/concurrent_programming Clojure.
Je crois que GHC est livré avec une bibliothèque STM, et il existe des techniques pour STM en Clojure.
Pour les autres langues, consultez http://en.wikipedia.org/wiki/Software_transactional_memory#Implementations