Программная транзакционная память(software transactional memory, SТМ) - концепция, которая переносит идею транзакции в межпоточное взаимодействие.
Потоки работают с копией данных из памяти, не блокирую таким образом друг друга, при завершении транзакции происходит коммит, что означает, что все изменения вносятся в журнал виртуальной машины, если не происходит кофликтов в имененном состоянии памяти, то изменения фиксируются в памяти. В случае конфликта изменения откатывается и виртуальная машина выполняет снова траназкционный код с новым состоянием памяти и опять пытается сделать коммит.
На практике такой подход намного концептуально сильнее подхода локов, но приносит дополнительные расходы на виртуальную машину - журнал, повторные попытки и т.д.
Часто в небольших приложениях программы с локами работают быстрее.
Но SТМ решает некоторые задачи, которые не может решить лок, а также программы в такой конецпции намного проще и понятние.
В принцпипе найхудшая оценка алгоритмики подхода = O(n) при n - количество потоков.
SТМ реализован в ядре Clojure.
Потоки работают с копией данных из памяти, не блокирую таким образом друг друга, при завершении транзакции происходит коммит, что означает, что все изменения вносятся в журнал виртуальной машины, если не происходит кофликтов в имененном состоянии памяти, то изменения фиксируются в памяти. В случае конфликта изменения откатывается и виртуальная машина выполняет снова траназкционный код с новым состоянием памяти и опять пытается сделать коммит.
На практике такой подход намного концептуально сильнее подхода локов, но приносит дополнительные расходы на виртуальную машину - журнал, повторные попытки и т.д.
Часто в небольших приложениях программы с локами работают быстрее.
Но SТМ решает некоторые задачи, которые не может решить лок, а также программы в такой конецпции намного проще и понятние.
В принцпипе найхудшая оценка алгоритмики подхода = O(n) при n - количество потоков.
SТМ реализован в ядре Clojure.
Комментариев нет:
Отправить комментарий