节点的网络工作者是否会贬低erlang?

时间:2010-12-27 22:43:50

标签: erlang node.js web-worker

我很好奇Erlang是否会被Node.js杀死,这可能非常受欢迎,速度很快且有web workers。可能吗?为什么呢?

  

但是多处理器呢?   并发?不是必需的线程   将程序扩展到多核   电脑?流程是必要的   扩展到多核计算机,而不是   内存共享线程。该   可扩展系统的基础是   快速网络和非阻塞   设计 - 其余的是消息传递。在   未来的版本,Node将能够   fork新进程(使用Web   工人API)非常适合   目前的设计。

3 个答案:

答案 0 :(得分:16)

Node.js和Erlang在大草原上是完全不同的野兽。

示例:

Node.js以协作式多任务模型为中心,让人联想到Python Twisted或Rubys EventMachine。相反,Erlang是一个先发制人的多任务系统,配有调度程序等。

Node.js实现了JavaScript,这是一种基于原型的OO语言,具有必要的基础和一些功能性思想。 Erlang本质上是以通常的函数式实现增强的lambda演算。

Node.js主要围绕一台机器进行居中,每台机器按顺序处理。即将到来的Web worker和multi-node扩展允许您使用本机的所有CPU。 Erlang旨在无缝集成多个节点,这些节点旨在用于让(多个)Erlang物理机器的集群无缝地相互通信。

Node.js采用了大多数语言中常见的主动故障缓解的立场。另一方面,Erlang采用反应性故障缓解姿态:即使发生错误,也会使系统生存下来。在最糟糕的情况下,让另一台物理机器接管。

Node.js在很大程度上依赖于JIT来获得速度。 Erlang是一种更标准的编译语言。结果是Erlang可能更适合软实时,因为一段代码的挂钟时间通常更容易预测。

讨论:

您应该清楚,提出问题的方法与两种语言有很大不同。因此,出于这个原因,可能值得保持两者。换句话说,我认为一种语言不会完全取代另一种语言。 Node.js具有熟悉程度。 Erlang具有独特的力量w.r.t.的鲁棒性。

免责声明:我破解了Erlang。

答案 1 :(得分:5)

不太可能。

  • 利用JS的可变数据结构,在处理共享数据时,有更多的方法可以自己拍脚。
  • Erlang解决方案可以轻松,透明地聚类; node.js似乎没有提供类似的支持。
  • Erlang VM似乎提供了更多工具来查看正在运行的系统。
  • Erlang是静态编译的,并且有一些静态类型支持;这通常会提高可靠性。
  • V8仅因JIT而快速运行,而JIT通常会消耗大量内存。 Erlang的VM可能在相同的CPU和内存预算下处理更多的负载。

Node.js肯定有很多好处,但这些似乎都没有从它的位置驱逐Erlang。我希望node.js能够取代PHP:)

答案 2 :(得分:4)

Node.js是一个问题的答案,“如何通过将一个事件循环用一个非常少的代码行固定到一种语言上来构建一个高效的并发系统”。问题本身也很有意义。

Erlang是对并发性问题,语言,编译器,库的完整答案,一切都是围绕容错,分布和并发构建的。

Erlang的完整列表优势?这是一个很长的清单,我没有那么多时间。一些样本:

  • 一个轻量级,可扩展的并发机制(进程),而不是轻量级(事件)加上一个重量级的(Web worker)
  • 流程中的主管层次结构
  • 软实时功能(由于语言设计,编译器和运行时支持)
  • 进程维护一个调用堆栈,node.js中的事件忘记了它们的来源,这使得错误消息/堆栈跟踪的洞察力降低了很多。
  • 不需要在连续传递样式中嵌套括号/缩进来创建回调,事件循环和继续传递由编译器/运行时管理

Node.js具有使用JavaScript的独特优势,因此无论node.js是否足够好,它在人气方面都可能胜过Erlang,而且在很多地方都是如此。