最近 akka を見ていて、かなり印象的です。場所の透過性、監視階層など、erlang の優れた機能のほとんどを備えているようです。akka にはない erlang の機能はありますか?
5 に答える
免責事項: 私は Akka の PO です
- Erlang はコピー オン センドを行います - Akka は VM 内の送信に共有メモリ (不変オブジェクト) を使用します
- Erlang はプロセスごとの GC を行い、Akka は JVM GC を使用します。
- Erlang にはOTPがあります- Akka は Java エコシステム全体 (Apache Camel、JAX-RS など) と統合します。
- Erlang がプロセスのスケジューリングを行います。Akka を使用すると、さまざまな Dispatcher を無限の設定機会で使用できます。
- Erlang はホット コード リロードを行います - Akka はそれをサポートできますが、JVM クラスローディングのために柔軟性が低くなります。
それらは私の頭の上からのものです。
一方、Akka を使用するということは、Scala、Java、Groovy、または JRuby を使用してアプリケーションを作成できることを意味します。
Erlang では、約 1000 回のリダクションごとにプロセスが切り替わることが保証されています。Scala/Akka エージェントのような単純なフレームワークでは、受信での作業が完了するまでスケジューラを所有します。チェックメイト。ゲームオーバー。Hasta la vista :) 皆さん、疑似技術で時間を無駄にしないでください。ここにいる人たちが Scala と Erlang を比較していることにショックを受けました。
また、いわゆる「キラー機能」は他にもたくさんありますが、これが私のアドバイスです。機能の観点から考えるのではなく、特定の言語を可能にするイディオムについて考えてください。Scala は「最高の機能」を盗み、Erlang は適切なイディオムを使用してシステムを確実に構築できるようにし、それらのイディオムから駆動される高レベル言語を実装します。Erlang を学ぶとき、あなたは自分の心を再構築し、信頼できる分散システムについての考え方を再構築します。Erlang はあなたを教え、あなたをアップグレードします。Scala は、他の言語から優れた機能を盗もうとするもう 1 つの命令型 (申し訳ありませんが、マルチパラダイム的で面白い言葉) 言語です。
プロセスの分離についてはほとんど誰も言及していません。「あなたのスレッドが私のがらくたを台無しにすることができない」という保証がなければ、分散システムは推論するのがはるかに困難です。( Erlangのプロセスではすでに十分に困難です。)
AFAIK(JVMでの直接の経験が限られていることを考えると、それほど遠くはありません)、JVMで実際にプロセス分離を「正しく」行うのはErlangだけです。グーグル氏は、「マイクロリブート」技術(「リカバリー指向コンピューティング」)を使用する研究システムに関するフォックスとカンデア(?)による研究をどこで見つけるかについていくつかのヒントを与えることができます。Erlang開発者はその調査を読み、いくつかのことを言います。
- クラブへようこそ、何がそんなに長くかかりましたか?
- ただし、JVMを使用すると、参加が非常に困難になります。:-)
私にとって、ダウンタイムのない Erlang クラスター全体でのホット コード スワップ (例: make:all([netload]
) は、Erlang キラー機能の 1 つです。
しかし、あなたの質問を逆にしてみましょう: akka には何があり、Erlang にはありませんか? もちろん、Java に多数の拡張機能とライブラリ (scala、akka、spring、osgi など) を追加して、Erlang に近づけることができます。しかし、ポイントはどこですか?要するに、これらすべての拡張機能は、単純な Erlang 言語を学習するよりもはるかに複雑です。Erlang 言語は、ダウンタイムなしで最高のスケーラビリティを提供できることが 20 年以上にわたって証明されています。
おそらくErlangはより大きな分散システムに適しています(vjacheの回答に従って)が、通常のサーバーで複数のCPUを最大限に活用したい場合は、Akkaが適しています。優れた抽象化、パフォーマンス、およびJavaエコシステムとの統合を提供します。