Какие алгоритмы используются в 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.