Concurrency Node.js或Erlang
当涉及到并发级别时,我非常喜欢这些工具 Erlang/OTP看起来更稳定,但需要更多的学习和对函数式语言范式的深入研究。对于多核CPU来说,Erlang/OTP似乎使它变得更好(如果我错了,请纠正我) 但我应该选择哪一个呢?从短期和长期来看,哪一个更好Concurrency Node.js或Erlang,concurrency,erlang,multicore,node.js,Concurrency,Erlang,Multicore,Node.js,当涉及到并发级别时,我非常喜欢这些工具 Erlang/OTP看起来更稳定,但需要更多的学习和对函数式语言范式的深入研究。对于多核CPU来说,Erlang/OTP似乎使它变得更好(如果我错了,请纠正我) 但我应该选择哪一个呢?从短期和长期来看,哪一个更好 我的目标是学习一种工具,它可以在高负载下比传统语言更容易地扩展我的Web项目。我想尝试一下Erlang。尽管这将是一个更陡峭的学习曲线,但您将从中获得更多,因为您将学习函数式编程语言。另外,由于Erlang是专门为创建可靠的、高度并发的系统而设计
我的目标是学习一种工具,它可以在高负载下比传统语言更容易地扩展我的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视为节点)
请记住,node仍处于后期开发阶段,因此已经经历了相当多的更改,这些更改破坏了早期代码。然而,据推测,您可以期望API不会有太多变化。所以,如果你想找一些有趣的东西,我会说node是一个不错的选择。我是一个长期的Erlang程序员,这个问题促使我去看看node.js。看起来非常好 看起来确实需要生成多个进程来利用多个核心。不过,我看不到有关设置处理器亲和力的任何信息。您可以在linux上使用taskset,但它可能应该参数化并在程序中设置 我还注意到平台支持可能会稍微弱一点。具体来说,您需要在Cygwin下运行Windows支持 不过看起来不错
编辑
Node.js现在对Windows有了本机支持。虽然我个人喜欢Erlang,但我承认我对JavaScript有点偏见。我的建议是您评估以下几点: