2009-03-23 14 views
3

Erlangは、アクター間でメッセージをやりとりする際に、並行処理モデルとして動作します。Erlang Style Concurrencyと「状態を共有する」方法は?

には、のアイテムを販売する3人の俳優がいるとします。アイテムの合計数は7です。彼らはどのようにexcactly 7アイテムを販売していますか?彼らはどのように自分自身を調整するのですか?利用可能なアイテムの数が1つで、「購入」メッセージ(インベントリアクタ)に作用する1人の俳優を持つことができます。これはSPOFです。

ロックの代わりに並行性のためにメッセージキューを使用すると、Javaのような他の言語でも並行性が維持されます。

アムダールボトルネックのないベスト)

答えて

1

これらのアクターは、真空中で行動するのですか?彼らには、7人のバイヤーまたは7個の在庫がある必要があります。キューイングされたバイヤーまたはインベントリストアは、それらを調整する必要があります。

3

あなたは物事(この場合は在庫品)を表すプロセスを持っています。他のプロセスが購入したいとき、彼らは在庫を尋ねます、あなたはそれを持っていますか?私はそれを買うことができますか?

配信を表すプロセスは、20個の新しいものがあり、ここで、在庫を教えてくれます...

2

私は、例えば、在庫管理を担当するサーバプロセスを実装しますバックエンドとしてdetsまたはMnesiaテーブルを使用します。このプロセスは監視ツリーの一部である可能性があります。失敗すると自動的に再起動されます。私のセールスマンプロセス(あなたが上で述べた3人の俳優)は、このサーバープロセスと通信して、彼らが販売するアイテムを求めます。十分な品物があれば、問題はありません。そうでなければ、セールスマンはその品目が売り切れたという回答を得て、別のプロセスが新しいものを購入するための情報を入手します。

+0

ああ、優秀です。具体的な答え、ツイッターの人々はちょうど侮辱しました。しかし、Mnesiaテーブルのような中央リソースは "Erlang並行性"であると思いますが、これは共有リソースのように見えます(状態を共有するためにデータベースを使用するようなもの)? (しかしErlangのプロとスーパーバイザーツリーの一部である) –

+0

あまりにも、Erlangはプロセス、テーブル、またはデータベースの形式で共有リソースを知っています。しかし、それはそれらを簡単に使用して保存します。メッセージキューは同期の問題を処理し、再起動の監視を心配し、Mnesiaは異なるノード上のレプリケーションを認識します。気を付けなければならないが、助けになる。 – Mue

+0

テーブルを管理するプロセスがなくても、メネシアがやっていることがあるからです。トランザクションを使用する場合は、テーブルがアトミックに更新されることを確認します。 –

関連する問題