5

私はErlangの初心者です。言語がアクターモデルの設計を採用し、高度な並行プログラミングの重要なポイントである軽量プロセスの概念を作成していることを理解しています。ただし、参照透過性を課す関数型プログラミングパラダイムも採用しています。つまり、割り当て後に変数を変更することはできません。だから、私は次のような似たような機能をたくさん見ます:

gb_trees:delete(Key, Tree1) -> Tree2

ツリーからキーを削除すると、実際にはまったく新しいツリーが作成されます。これは、Tree1の残りのすべてのノードをここで内部的に複製することを意味しますか?

もしそうなら、この言語は高性能サーバー開発に本当に適していますか?

ありがとう !

4

1 に答える 1

10

ツリーの場合、実際に変更されるノードをコピーするだけで済みます。あなたが木を持っているとしましょう:

       A
      / \
     /   \
    B     C
         / \
        D   E

Bを引数としてメソッドを呼び出す場合delete_tree、サブツリーCDEは操作前と同じであるため、コピーする必要があるノードはAだけです。

また、操作後にTree1を使用せず、結果のツリーのみを使用する場合、コンパイラーは操作を変更してツリーを直接変更できるため、より高速になる可能性があります。

これらの操作はそれほど高価ではなく、ほとんどのデータ構造では、冗長なコピーのオーバーヘッドは非常に小さいです。いくつかのもの(つまり、バイト配列としてロードされた大きな画像)には、創造的なソリューションが必要になる場合があります。

Erlangは、速度ではなく信頼性の点でサーバーシステムに適しています。大規模なシステムでさらに数十台または数百台のサーバーを追加することは大したことではありませんが、たとえば電話の請求に1秒のダウンタイムがある場合は大したことです。米国では、それは請求されていない何十万もの電話かもしれません-これは明らかに、より多くのサーバーを購入するよりも大きなコストです。

于 2013-03-26T07:36:11.717 に答える