5

非常に人気があり、高速で、 WebワーカーがいるNode.jsによってErlangが殺される可能性があるかどうか知りたいです。出来ますか?なんで?

しかし、マルチプロセッサの同時実行性についてはどうでしょうか?プログラムをマルチコアコンピューターにスケーリングするためにスレッドは必要ありませんか?プロセスは、メモリ共有スレッドではなく、マルチコアコンピューターに拡張するために必要です。スケーラブルなシステムの基本は、高速ネットワーキングとノンブロッキング設計です。残りはメッセージパッシングです。将来のバージョンでは、Nodeは現在の設計にうまく適合する新しいプロセスを(Web Workers APIを使用して)フォークできるようになります。

4

3 に答える 3

17

Node.jsとErlangは、サバンナではまったく異なる獣です。

例:

Node.jsは、PythonTwistedまたはRubysEventMachineを彷彿とさせる協調マルチタスクモデルを中心としています。それどころか、Erlangはスケジューラーなどを備えたプリエンプティブなマルチタスクシステムです。

Node.jsは、命令型ベースといくつかの機能的なアイデアを備えたプロトタイプベースのオブジェクト指向言語であるJavaScriptを実装しています。Erlangは、基本的に、通常の関数スタイルで拡張ラムダ計算を実装します。

Node.jsは主に単一のマシンを中心としており、各リクエストは順番に処理されます。今後のWebワーカーとmulti-node拡張機能により、マシンのすべてのCPUを使用できるようになります。Erlangは、複数のノードをシームレスに統合するように設計されています。これは、(複数の)Erlang物理マシンのクラスターが相互にシームレスに通信できるようにするために使用されます。

Node.jsは、ほとんどの言語で見られるプロアクティブな障害軽減の通常のスタンスを取ります。一方、Erlangは、事後対応型の障害軽減スタンスを採用しています。システムは、他の方法では説明できないエラーが発生した場合でも存続するように構築されています。最悪の場合、別の物理マシンに引き継がせます。

Node.jsは、速度を取得するためにJITに大きく依存しています。Erlangはより標準的なコンパイル言語です。その結果、コードの実時間は通常より予測可能であるため、Erlangはソフトリアルタイムに適している可能性があります。

討論:

提案された問題へのアプローチが2つの言語とは大きく異なることは明らかです。したがって、まさにこの理由から、両方を維持することはおそらく価値があります。言い換えれば、ある言語が他の言語に完全に取って代わるとは思いません。Node.jsには親しみやすさの強みがあります。Erlangは堅牢性に対して明確な強みを持っています。

免責事項:私はErlangをハックします。

于 2010-12-28T00:17:04.313 に答える
5

ありそうもない。

  • JS のミュータブルなデータ構造を使用すると、共有データの処理中に自分自身を撃つ方法がはるかに多くなります。
  • Erlang ソリューションは、簡単かつ透過的にクラスター化できます。node.js は同等のサポートを提供していないようです。
  • Erlang VM は、実行中のシステムを調べるためのツールをさらに提供しているようです。
  • Erlang は静的にコンパイルされ、いくつかの静的型付けをサポートしています。これにより、通常、信頼性が向上します。
  • V8 は JIT のおかげで高速に実行され、JIT はしばしば大量のメモリを消費します。Erlang の VM は、おそらく同じ CPU とメモリの予算でより多くの負荷を処理できます。

Node.js には確かに多くの利点がありますが、これらのいずれも Erlang をその場所から追い出すことはないようです。代わりにnode.jsがPHPを追い出すことを願っています:)

于 2010-12-27T23:21:25.803 に答える
4

Node.js は、「途方もなく少ないコード行で言語にイベント ループを追加して、効率的な同時実行システムを構築するにはどうすればよいか」という質問に対する答えです。また、質問自体も素晴らしいものです。

Erlang は、並行性の問題、言語、コンパイラ、ライブラリに対するより完全な解決策であり、すべてがフォールト トレランス、分散、および並行性に基づいてゼロから構築されています。

Erlang の利点の完全なリストは? それは長いリストです。私にはそれほど時間がありません。いくつかのサンプル:

  • 軽量でスケーラブルな同時実行メカニズム (プロセス) 1 つ (イベント) と重量のメカニズム (Web ワーカー) の代わりに
  • プロセス間のスーパーバイザ階層
  • ソフト リアルタイム機能 (言語設計、コンパイラ、およびランタイム サポートによる)
  • プロセスはコール スタックを維持し、node.js のイベントはどこから来たのかを忘れるため、エラー メッセージやスタック トレースの洞察力が大幅に低下します。
  • コールバックを作成するために継続渡しスタイルで括弧/インデントをネストする必要はありません。イベントループと継続渡しはコンパイラ/ランタイムによって管理されます

Node.js には JavaScript を使用する明確な利点があるため、node.js で十分な場所があれば、人気という点ではおそらく Erlang に勝るでしょう。

于 2010-12-28T00:09:45.470 に答える