2013-03-26 50 views
5

私はErlangの初心者です。言語がアクターモデルの設計を採用し、軽量プロセスのコンセプトを作成することが理解されています。これは、高い並行プログラミングにとって重要なポイントです。しかし、それはまた、参照透明性を課す機能プログラミングパラダイムを採用する。つまり、割り当て後に変数を変更することはできません。私たちは木からキーを削除すると、我々は確かに全く新しいツリーを作成アーランは本当に速いですか?

gb_trees:delete(Key, Tree1) -> Tree2 

:だから、私のような同様の機能の多くを参照してください。つまり、ここではTree1のすべてのノードがクローンとしてクローン化されていますか?

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

ありがとうございます!

+5

私はErlangが(例えば)Javaと比較して比較的遅いことがわかりました。私が推測したのは、その解釈された性質などのためです。しかし、複数のCPUより良い(私の限られた経験の中で)。したがって、コピーによってシングルスレッドアプリケーションの速度が少し遅くなりますが、平均的なプログラマは、非常に高いスループットとボトルネックの少ないマルチスレッドアプリケーションを作成できます。 –

答えて

10

ツリーの場合は、実際に変更されるノードのみをコピーする必要があります。

 A 
    /\ 
    / \ 
    B  C 
     /\ 
     D E 

あなたが引数としてBを使用してdelete_treeメソッドを呼び出す場合サブツリーCDEは、まだ操作前と同じなので、コピーする必要がある唯一のノードは、次のとおりです。あなたは木を持っているとしましょう

また、操作後にTree1を使用せず、結果のツリーのみを使用すると、コンパイラは操作を変更してツリーを直接変更することができます。

これらの操作はあまり高価ではありません。ほとんどのデータ構造では、冗長なコピーオーバーヘッドは非常に小さいです。いくつかのもの(バイト配列として読み込まれた大きな画像)では、creative solutionsが必要な場合があります。

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

関連する問題