Concurrency Node.js或Erlang

Concurrency Node.js或Erlang,concurrency,erlang,multicore,node.js,Concurrency,Erlang,Multicore,Node.js,当涉及到并发级别时,我非常喜欢这些工具 Erlang/OTP看起来更稳定,但需要更多的学习和对函数式语言范式的深入研究。对于多核CPU来说,Erlang/OTP似乎使它变得更好(如果我错了,请纠正我) 但我应该选择哪一个呢?从短期和长期来看,哪一个更好 我的目标是学习一种工具,它可以在高负载下比传统语言更容易地扩展我的Web项目。我想尝试一下Erlang。尽管这将是一个更陡峭的学习曲线,但您将从中获得更多,因为您将学习函数式编程语言。另外,由于Erlang是专门为创建可靠的、高度并发的系统而设计

当涉及到并发级别时,我非常喜欢这些工具

Erlang/OTP看起来更稳定,但需要更多的学习和对函数式语言范式的深入研究。对于多核CPU来说,Erlang/OTP似乎使它变得更好(如果我错了,请纠正我)

但我应该选择哪一个呢?从短期和长期来看,哪一个更好


我的目标是学习一种工具,它可以在高负载下比传统语言更容易地扩展我的Web项目。

我想尝试一下Erlang。尽管这将是一个更陡峭的学习曲线,但您将从中获得更多,因为您将学习函数式编程语言。另外,由于Erlang是专门为创建可靠的、高度并发的系统而设计的,因此您将学到大量关于同时创建高度可扩展的服务的知识。

对于多个项目,我正在研究与您相同的两个备选方案,即gotts

到目前为止,对于一个给定的项目,我想出的最好的选择就是我是否需要使用Javascript。我希望迁移的一个现有系统已经用Javascript编写,所以它的下一个版本可能在node.js中完成。其他项目将在一些ErlangWeb框架中完成,因为没有可迁移的现有代码库

另一个考虑因素是,Erlang的可扩展性远远超出了多个核心,它可以扩展到整个数据中心。我在node.js中没有看到一种内置机制,可以让我发送另一个js进程消息,而不必关心它在哪台机器上,但这是在最低级别上构建在Erlang中的。如果您的问题不够大,不需要多台机器,或者不需要多个协作进程,那么这一优势可能无关紧要,因此您应该忽略它

二郎岛确实是一个可以潜水的深潭。我建议在开始构建web应用程序之前,先编写一个独立的功能程序。更简单的第一步是尝试以更具功能性的风格编程JS,因为您似乎对Javascript很熟悉。如果您使用jQuery或Prototype,那么您已经沿着这条路径开始了。尝试在Erlang或其同类(Haskell、F#、Scala…)中的纯函数式编程和函数式JS之间跳跃


一旦您熟悉了函数式编程,就可以从众多Erlang web框架中选择一个;在这个后期阶段,您可能不应该直接将应用程序编写到诸如
inets
之类的低级应用程序。例如,请看类似这样的内容。

我不能代表Erlang发言,但有几件关于node的事情没有提到:

  • Node使用Google的V8引擎将javascript编译成机器代码。所以node实际上相当快。这就是事件驱动编程和非阻塞io带来的速度优势
  • Node有一个相当活跃的社区。跳上freenode上的IRC组,你就会明白我的意思了
  • 我注意到上面的评论是基于学习函数式编程语言是有用的这一点来推动Erlang的。虽然我同意扩展你的技能并掌握其中一项技能是很重要的,但你不应该把一个项目建立在你想学习一种新的编程风格这一事实上
  • 另一方面,Javascript已经进入了一个您可以轻松编写的范例中!另外,它是javascript,所以当您编写客户端代码时,它看起来和感觉上是一致的
  • node的社区已经投入了大量的资源!有redis、mongodb、Coach等模块。另一个值得研究的好模块是(将Sinatra视为节点)
看看雅虎博客上的Ryan Dahl,他实际上是node的作者。我认为这将有助于您更好地了解节点的位置及其去向


请记住,node仍处于后期开发阶段,因此已经经历了相当多的更改,这些更改破坏了早期代码。然而,据推测,您可以期望API不会有太多变化。所以,如果你想找一些有趣的东西,我会说node是一个不错的选择。

我是一个长期的Erlang程序员,这个问题促使我去看看node.js。看起来非常好

看起来确实需要生成多个进程来利用多个核心。不过,我看不到有关设置处理器亲和力的任何信息。您可以在linux上使用taskset,但它可能应该参数化并在程序中设置

我还注意到平台支持可能会稍微弱一点。具体来说,您需要在Cygwin下运行Windows支持

不过看起来不错


编辑
Node.js现在对Windows有了本机支持。

虽然我个人喜欢Erlang,但我承认我对JavaScript有点偏见。我的建议是您评估以下几点:

  • 您是否在重用这两种语言中的现有代码(无论是源代码还是程序员经验!)
  • 您是否需要/希望在不停止应用程序的情况下进行动态更新(这是Erlang默认获胜的地方-其运行时就是为这种情况而设计的,OTP包含所有必要的工具)
  • 就独立、并发操作而言,而不是带宽而言,预期流量有多大
  • 您对每个请求执行的操作“并行”程度如何
  • Erlang拥有非常精细的并发性和网络透明的并行分布式系统。根据项目的具体情况,此类系统成熟实现的可用性可能会超过学习新语言的任何问题。在ErlangVM上还可以使用另外两种语言,Ruby/Python和

    还有一种选择是同时使用两者,特别是将Erlang用作一种“集线器”。我不确定Node.js是否有外部功能接口系统,但如果有,