вопросы реализации stm - PullRequest
2 голосов
/ 14 мая 2011

Привет, ребята,
В какой-то момент я думаю, что эти реализации stm (мультивселенная, которую я использовал немного ...), чрезмерно раскручены.Потому что в какой-то момент они используют CAS, который обеспечивает им атомарность операций.Что если я использую CAS напрямую, а не использую эти реализации?Хотя я согласен с тем, что эти реализации могут предоставлять и другие функции, но если я смогу добиться той же производительности и не иметь большого количества функций для использования, то должен ли я использовать CAS напрямую вместо использования нескольких стихов или scala или других реализаций?
Привет, ребята, вы заметили какое-либо увеличение производительности при использовании этих реализаций stm, чем CAS?с тех пор, как я запускаю (заданный в multiverse doc и atomicInteger JAVA ) atomicCounter, я получаю лучшую производительность в atomicInteger, чем в multiverse.Так это как _ база STM является CAS?_

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

STM может быть построен поверх множества различных примитивов синхронизации, но CAS часто используется, потому что это самый простой, самый легкий вариант, который не накладывает слишком много ненужных семантических ограничений.

Но да, просто использование операции CAS будет быстрее, чем использование чего-то, что, среди прочего выполняет операцию CAS.

Но они служат различным целям.CAS позволяет вам атомарно обновлять несколько select типов данных, STM обычно может использоваться для произвольных типов.STM дает вам атомарность в гораздо большей области транзакции (если ваша транзакция изменяет 4 разные переменные, все 4 фиксируются как одна и та же атомарная операция. Один CAS будет только атомарно обновлять один объект), и он даетгарантии изоляции и согласованности, которых не существует в CAS.

В конечном счете, вы не можете сравнить их.Это как сравнивать колесо с автомобилем.Да, колесо меньше и легче, но это потому, что оно не обладает той же функциональностью, что и автомобиль.

1 голос
/ 22 июня 2011

Что, если я использую CAS напрямую, а не эти реализации?

Вы могли бы сделать это, но это слишком низкий уровень для большинства проблем. Переход на CAS подобен написанию всего на ассемблере - конечно, вы можете это сделать, но это нецелесообразное использование вашего времени.

Задача состоит в том, чтобы найти то, что более точно соответствует уровню абстракции проблемы, а не компьютера.

Очевидно, что любое программное обеспечение TM должно быть реализовано в терминах аппаратного TM или операции атомарной блокировки. Дополнительная семантика отката и предотвращения столкновений может быть выполнена отдельно. Если вам нужно только атомарное сравнение и обмен, тогда STM - это больше, чем вам нужно. Выпадайте вниз и используйте мьютекс, семафор или другую абстракцию совместно используемой памяти ближе к инструкции CAS.

...