Какие алгоритмы используются в Clojure, Haskell (и других языках) для STM?
Как я понимаю, существует несколько различных алгоритмов для реализации программной транзакционной памяти (и это довольно активная область исследований). Где я могу найти (не углубляясь в исходный код), которые используются на разных языках и в библиотеках, особенно в Clojure и Haskell (GHC)?
3 ответа
Основным источником информации о STM Clojure, помимо самого кода, является статья Software Transactional Memory Марка Фолькмана.
Он представляет краткий обзор высокого уровня STM -подхода (по сравнению с другими подходами к параллелизму), обобщает различные функции параллелизма, доступные в Clojure, затем погружается в STM Clojure, точно описывая, что происходит во время транзакции, и в конечном итоге идет прямо вниз. до уровня отдельных классов, участвующих. Помимо того, что он предлагает много точной информации о внутренней работе механизма Clojure STM, он содержит множество очень проницательных замечаний, касающихся ориентированных на параллелизм функций Clojure, так как они используются в идиоматических программах Clojure.
Фактической точкой входа в ресурсы STM Марка является эта страница, на которой в настоящее время есть несколько слайдов STM в дополнение к ссылке на последнюю версию основной статьи STM.
На очень высоком уровне одна вещь, которая интересна в реализации STM в Clojure, заключается в том, что она очень сильно отличается от всех других реализаций. Рич обращал гораздо больше внимания на реальные реальные высокопроизводительные базы данных, чем на научные статьи о гипотетических СТМ. Например, STM Clojure, насколько мне известно, является единственным STM, который использует Multi Version Concurrency Control (MVCC), который является хорошо известным методом в мире баз данных (на самом деле, практически нет серьезной базы данных, которая не использовать MVCC), но это почти не обсуждается в мире STM.
См. http://www.haskell.org/haskellwiki/Software_transactional_memory для Haskell (и GHC) и http://clojure.org/concurrent_programming для Clojure.
Я считаю, что GHC поставляется с библиотекой STM, и в Clojure есть несколько методов для STM.
Для других языков, см. http://en.wikipedia.org/wiki/Software_transactional_memory