2013-04-04 19 views
5

私は、HaskellとSTMに関するBeautiful Concurrencyの記事を読んできました。Haskellの並行性と永続性

この例は、銀行口座振替です。

ヒープメモリに置かれた2つの数字の間のノーディーな銀行振込です。これはすぐに私の頭の中で提起

質問は以下のとおりです。

  1. 転送がアトミックにディスクを打ちますか。銀行取引が永続的に記録されるまで - ACID - 私の本では起こっていません。 Haskellのような言語を使っている人は、STMの内部でIOを行なわないようにするために、揮発性メモリだけでなく、実際には原子の変化をどうやって行うのでしょうか?

  2. これをどのように多くのマシンに配布するか。トランザクションを分散させ、横方向のアプリケーションをスケーリングするにはどうしたらいいですか?

+0

答えが暗示しているように、銀行業務の例は比喩として理解されていると思われます。 – jberryman

+0

@jberrymanだから、それは何のために便利ですか?より代表的な問題は何でしょうか?以下、2つの答えと1つのstm-io-hooksのコメントがあります.1)stmがioで動作する可能性があり、2)これはhaskellコミュニティでもあまりよく知られていません。ここにまだ公開されていない脆弱性があります。 – Will

+0

STMは、並行性があり、ロックで必要なものを実装するのが簡単ではない場合に便利です。あなたの質問がより重視されていれば、本当に面白い答えを得るかもしれないと思います。 – jberryman

答えて

7

どのようにHaskellのような言語使用している人々 - 実際には本当にだけではなく揮発性メモリにあるデータの原子の変更を行う - あなたはSTM内の任意のIOをやらないのだろうか?

IO以上の効果型のライブラリを介して。例えば。 ACIDまたは"MACID"システム。

これをどのように多くのマシンに配布するか。トランザクションを分散させ、横方向のアプリケーションをスケーリングするにはどうしたらいいですか?

私はHaskellのための分散STMの実装を知らないが、しかしCloud HaskellはGHCのための分散プログラミングモデルです。

+0

は(1)STMを使用していないという意味ですか?代わりにIOライブラリで古典的なロックですか? – Will

+1

GHCのメモリ内STMは、一部のディスクベースのライブラリで使用されます。ライブラリ自体がトランザクションのセマンティクス(データベースなど)を実装することもあります。 http://hackage.haskell.org/package/stm-io-hooks –

9

STMは、スレッドの同期と通信を目的としており、ではなく、データの永続的な格納にはです。つまり、STMは、スレッドがデッドロックや競合状態なしにデータを共有できるように設計されています。スレッドが信号を相互に送信する場合または基本的にスレッドの活動を調整する。

の永続的なデータをディスクに保存する場合は、データベースを使用します。 MySQL、PostgreSQL、Oracleなどから選択できます。これは、STMが解決するように設計されている問題ではありません。

処理中...私たちはまだ作業中です。私は、これがどれほど近づいているかを説明するために、これらのことを十分に詳しく追っていません。

+0

これは、Donのstm-io-hooksへのリンクでどこにあるのでしょうか? – Will