Множественные ссылки обеспечивают больший параллелизм, поскольку все записи в Atom линеаризуются. STM позволяет выполнять множество параллельных транзакций, когда нет конфликтующих записей/ensure
(и, кроме того, он предоставляет commute
, который позволяет выполнять определенные записи, которые обычно вызывают конфликт, чтобы этого не делать).
Кроме того, STM сотрудничает с агентами — действия, отправленные агентам из транзакции, будут выполняться тогда и только тогда, когда транзакция фиксируется. Это позволяет безопасно вызывать побочные эффекты внутри транзакции. Атомы не предлагают подобных возможностей.
Компромисс заключается в том, что накладные расходы STM больше, чем у Atom, плюс есть вероятность возникновения определенных аномалий (перекос записи, см. страница Википедии, посвященная изоляции моментальных снимков). Кроме того, можно добиться отличного параллелизма с STM, но при этом возникают серьезные проблемы с получением моментального снимка всей системы; в связи с этим см. превосходную запись в блоге Кристофа Гранда. и его библиотеку megaref.
Во многих сценариях люди считают, что достаточно просто хранить все состояние в одном атоме, и это определенно более простой и легкий подход.
person
Michał Marczyk
schedule
07.11.2013