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