STMにはさまざまなアプローチがあります。これは、「型システム」のような非常に幅広いトピックです。あるアプローチは簡単に成功しますが、他のアプローチはさまざまな理由で失敗します。
Clojure の STM には、以前のアプローチよりも実用的で効果的なものにするいくつかの設計上の決定があります。
- STM で任意のデータを保護しようとはしません。 ( など) のような特別な管理参照を使用する必要があります
ref
。これにより、以前の多くの STM アプローチよりもはるかに単純で焦点を絞った設計になります (これには、少なくとも上記のリンク先の記事で説明されているように、Microsoft のアプローチが含まれます)。
- 不変データによるマルチバージョン同時実行制御を使用します。これにより、トランザクション処理がより効果的かつ実用的になります。特に、非トランザクション読み取りにはロックが必要ないことを意味し、これはパフォーマンスの大幅な向上です....
- これは関数型言語のコンテキストで行われます。特に、Clojure のほとんどのコードはデフォルトで副作用がないという事実により、トランザクションの再試行などの手法の適用がはるかに簡単になります。
これらの設計上の決定の結果として、Clojure の STM は以前の STM アプローチとは非常に異なる獣であり、その斬新な設計のために成功したと思います。以下のビデオは少し古いですが、その仕組みの概要を知りたい場合に最適です。
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey