簡體   English   中英

STM.NET與Clojure STM

[英]STM.NET versus Clojure STM

我想知道Clojure如何實現軟件事務內存並且沒有看到任何問題,而微軟沒有完成C#的工作,並注意到一些問題使得實現這里描述的STM不實用: http: //www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx

有什么好主意嗎?

Clojure幾乎從語言的開頭開始使用STM,它影響了語言設計以及語言的使用方式,使STM變得實用。 C#必須從現有語言和現有使用方式開始,這使得問題更加困難。 最看似重要的區別是Clojure的STM以語言核心的不可變數據開始,然后在身份概念的基礎上構建了身份和STM的概念。 值得注意的是,他們有許多不同類型的STM和clojure的STM是非常不同的。

STM許多不同的方法 這是一個非常廣泛的主題,如“類型系統”:一種方法很容易成功,而其他方法由於各種不同的原因而失敗。

Clojure的STM有一些設計決策使IMHO比以前的方法更實用和有效:

  • 不會嘗試使用STM保護任意數據 - 您必須使用特殊的托管引用,如( ref和類似)。 這使得它比許多早期的STM方法(這包括微軟的方法,至少如上面鏈接的文章中所描述的)更簡單,更集中的設計
  • 它使用具有不可變數據的 多版本並發控制 這使得事務處理更加有效和實用。 特別是,這意味着非事務性讀取不需要任何鎖定,這是一個巨大的性能勝利....
  • 它是在函數式語言的上下文中完成的 - 特別是,Clojure中的大多數代碼在默認情況下都是無副作用的,這使得應用事務重試等技術變得更加容易。

由於這些設計決策,Clojure的STM與之前的STM方法完全不同,我認為由於其新穎的設計而成功。 如果您想了解它的工作原理,下面的視頻有點陳舊但非常好:

http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM