私が理解しているように、ソフトウェアトランザクションメモリを実装するためのいくつかの異なるアルゴリズムがあります(これは非常に活発な研究領域です)。 ClojureとHaskell(GHC)を中心に、さまざまな言語やライブラリで使用されている場所はどこにありますか?Clojure、Haskell(および他の言語)でSTM用に使用されるアルゴリズムは何ですか?
答えて
のClojureのSTMの究極のリソースを参照してください - 離れて、コード自体から - マーク・フォルクマンによるSoftware Transactional Memory記事です。
Clojureで利用可能なさまざまな並行処理機能を要約し、ClojureのSTMに入り込んで、トランザクション中に何が起こるかを正確に記述するSTM-the-approach(他の並行処理のアプローチと比較して)最終的には関連する個々のクラスのレベルにまで下がります。 ClojureのSTM機械の内部動作に関する多くのハード情報を提供するだけでなく、Clojureの並行処理指向の機能に関する非常に洞察的な発言も数多く含まれています。
MarkのSTMリソースへの実際のエントリポイントはthis pageです。現在、STMの最新の記事へのリンクに加えて、いくつかのSTMスライドが含まれています。
ハスケル(およびGHC)の場合はhttp://www.haskell.org/haskellwiki/Software_transactional_memory、Clojureの場合はhttp://clojure.org/concurrent_programmingを参照してください。
GHCにはSTMライブラリが付属していると思いますが、ClojureにはSTMのいくつかのテクニックがあります。他の言語については
は、http://en.wikipedia.org/wiki/Software_transactional_memory#Implementations
非常に高いレベルで、ClojureのSTMの実装について興味深いのは、他のすべての実装と非常に異なる点です。 Rich氏は仮想のSTMに関する学術論文よりも実際の実績のある高性能データベースに向けてより多くを見てきました。たとえば、ClojureのSTMは、データベース世界でよく知られている技術であるMVCC(Multi Version Concurrency Control)を使用する唯一のSTMです(実際にはそこには深刻なデータベースがありません。は、 tはMVCCを使用しています)、STMの世界ではほとんど議論されていません。
この時点では、いろいろなSTMアルゴリズム/実装の間にまだ良い比較はありません。そう、はい、彼らはかなり異なっています。そして、どのセマンティクスが最も自然であるかについて話すことができます。しかし、我々はMVCCが他の実装技術よりも効率的に良い/悪いと言う傾向がないという根拠はない。真のシリアライズ可能なセマンティクスを保持する実装では実現できない書き込みスキューの可能性がMVCCによって明らかになります。 (これに反対する方法もありますが)。 – sclv
ありがとうございました!それは私が探していた情報の種類です(そしてそのページにはClojure STM BTWの非常に明確な説明があります)。 – Jay