Какие алгоритмы используются в Clojure, Haskell (и других языках) для STM? - PullRequest
14 голосов
/ 27 ноября 2010

Как я понимаю, существует несколько различных алгоритмов для реализации программной транзакционной памяти (и это довольно активная область исследований). Где я могу найти (не углубляясь в исходный код), которые используются на разных языках и в библиотеках, особенно в Clojure и Haskell (GHC)?

Ответы [ 3 ]

16 голосов
/ 27 ноября 2010

Источником ресурсов на STM Clojure, помимо самого кода, является статья Software Transactional Memory , написанная Марком Фолькманном.

В ней представлен краткий обзор высокого уровня STM-Этот подход (по сравнению с другими подходами к параллелизму) суммирует различные функции параллелизма, доступные в Clojure, затем погружается в STM Clojure, точно описывая, что происходит во время транзакции, и, в конечном итоге, опускается до уровня отдельных участвующих классов.Помимо того, что в нем содержится много точной информации о внутренней работе механизма Clojure STM, он содержит большое количество очень проницательных замечаний, касающихся ориентированных на параллельность функций Clojure, так как они используются в идиоматических программах Clojure.

фактическая точка входа в ресурсы Марка STM - эта страница , в которой в настоящее время есть несколько слайдов STM в дополнение к ссылке на последнюю версию основной статьи STM.

6 голосов
/ 28 ноября 2010

На очень высоком уровне одна вещь, которая интересна в реализации Clomure STM, заключается в том, что она очень сильно отличается от всех других реализаций.Рич обращал гораздо больше внимания на реальные реальные высокопроизводительные базы данных, чем на научные статьи о гипотетических СТМ.Например, STM Clojure, насколько мне известно, является единственным STM, который использует Multi Version Concurrency Control (MVCC), который является хорошо известным методом в мире баз данных (на самом деле, практически нет серьезных баз данных, которые не использует MVCC), но практически не обсуждается в мире STM.

5 голосов
/ 27 ноября 2010

См. 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

...