5

Haskell とSTMに関するBeautiful Concurrencyの記事を読んでいます。

銀行振込の例です。

これは銀行振込みのようなもので、ヒープ メモリにある 2 つの数字の間です。

これが私の頭の中ですぐに提起する質問は次のとおりです。

  1. その転送がアトミックにディスクにヒットする方法。銀行の取引が永続的なACID方式で記録されるまで、私の本ではそれは起こりませんでした。Haskell のような言語 (STM 内で IO を実行することはできません) を使用している人々は、揮発性メモリだけでなく、実際にデータのアトミックな変更を実際にどのように行っているのでしょうか?

  2. これを多くのマシンに分散する方法。分散トランザクションと横方向のアプリケーションのスケーリング (STM 内の IO なし) をどのように行うことができますか?

4

2 に答える 2

10

STM は、データの永続的なストレージではなく、スレッドの同期と通信を目的としています。つまり、STM は、スレッドがデッドロックや競合状態なしでスレッド間でデータを共有できるように設計されています。または、スレッドが互いにシグナルを送信する場合。または、基本的にスレッド アクティビティを調整します。

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

分散処理については、まだ取り組んでいます。私は、これがどれだけ現実に近づいているかについてコメントできるほど、これらのことを詳しく追っていません。

于 2013-04-04T07:44:08.620 に答える
7

Haskell のような言語 (STM 内で IO を実行することはできません) を使用している人々は、揮発性メモリだけでなく、実際にデータのアトミックな変更を実際にどのように行っているのでしょうか?

IO または同様のエフェクト タイプのライブラリ経由。たとえば、ACID または「MACID」システム。

これを多くのマシンに分散する方法。分散トランザクションと横方向のアプリケーションのスケーリング (STM 内の IO なし) をどのように行うことができますか?

Haskell の分散 STM 実装については知りませんが、Cloud Haskellは GHC の分散プログラミング モデルです。

于 2013-04-04T07:39:19.200 に答える