> 1. А собственно, чем ситуация с бесконечным откладыванием (всегда успевает изменится версия данных) лучше взаимоблокировок? Ну будет livelock. С ними ещё сложнее бороться, чем с deadlock-ами. В последних хоть можно восстановить граф зависимостей, который приводит к останову, а тут?
Можно делать несколько попыток и после n-ой неудачной, пойти по классической схеме и залочить необходимые ячейки. Но тогда уже нет гарантии от deadlock-а :).
> 3. Вообще-то уже достаточно давно показано, что общая память с изменяемыми извне состояниями — это тихий ужас для программирования. Не понятно, за счёт чего здесь облегчение будет достигнуто в программировании.
STM/HTM эмулирует нешаримую память. В идеале все выглядит так, будто бы ты единолично работаешь с памятью. Вариант share-nothing хорош, но у него есть свои недостатки — постоянные накладные расходы на копирование.
> 4. Sun же уже давно пыталась это сделать… Не выстрелило. И дело совсем не в том, что программная реализация неэффективна, а в том что сама абстракция неудобная для программирования. Вот если бы futures-ы получили аппаратную поддержку…
Почему неудобная? В Haskell и Clojure вроде как отлично работает. Даже Джо Армстронг(автор Erlang) сказал что из всех вариантов(кроме message-passing), STM самый многообещающий.
Можно делать несколько попыток и после n-ой неудачной, пойти по классической схеме и залочить необходимые ячейки. Но тогда уже нет гарантии от deadlock-а :).
> 3. Вообще-то уже достаточно давно показано, что общая память с изменяемыми извне состояниями — это тихий ужас для программирования. Не понятно, за счёт чего здесь облегчение будет достигнуто в программировании.
STM/HTM эмулирует нешаримую память. В идеале все выглядит так, будто бы ты единолично работаешь с памятью. Вариант share-nothing хорош, но у него есть свои недостатки — постоянные накладные расходы на копирование.
> 4. Sun же уже давно пыталась это сделать… Не выстрелило. И дело совсем не в том, что программная реализация неэффективна, а в том что сама абстракция неудобная для программирования. Вот если бы futures-ы получили аппаратную поддержку…
Почему неудобная? В Haskell и Clojure вроде как отлично работает. Даже Джо Армстронг(автор Erlang) сказал что из всех вариантов(кроме message-passing), STM самый многообещающий.
А у futures-ов есть свои проблемы с глобальным состоянием: calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/