【问题标题】:Eventdriven app - what language or VM to choose? [closed]事件驱动应用程序 - 选择什么语言或虚拟机? [关闭]
【发布时间】:2010-11-01 10:21:06
【问题描述】:

我正在考虑编写一个具有以下要求的应用。我精通 Ruby,但我愿意学习一门新语言,如 Scala、Clojure 或 Python。

并发/最佳性能

这是我的主要目标。它需要速度惊人,并以体面的方式支持并发。

使用 Redis 作为后端

这不是什么大问题,redis 有很多可用的驱动程序,但它可能会影响语言/平台的最终决定。

Websocket 支持

对 websockets 的良好支持是必须的。使用附加库(如 Cramp for Ruby::EM)是可以的。

选项

我收集了以下选项:

  • Ruby 事件机器
  • Python 扭曲
  • Node.js
  • Clojure
  • 斯卡拉
  • Java

此时编写原始 C 或汇编程序不是可行的选择。

并发

Ruby 1.9 仍然使用 GIL,因为所有基于 JVM 的解决方案都可以使用本机线程。在这种情况下,我不确定 Node.js。

所选语言如何影响性能?

问题

你有什么推荐的,为什么?你有动手经验吗?请赐教(以及 StackOverflow 的其余部分)

【问题讨论】:

    标签: ruby programming-languages concurrency clojure node.js


    【解决方案1】:

    【讨论】:

    • 提防诸如此类的粗略概括。这些不同平台的真正比较性能很大程度上取决于工作负载。
    • 同意,但 aleph 是一个非常酷的项目,即使它的速度不是快 2-3 倍,也应该关注它。
    • 我必须说,我发现这些概括通常是准确的,并且我使用过 JVM 和 Python Tornado 和 Twisted
    【解决方案2】:

    如果高性能并发是您的主要标准,我会投票支持 Clojure。 Clojure 从一开始就基本上是 designed for concurrent development,并且有一些令人印象深刻的 Clojure 演示在 800 多个核心 Azul 盒子上运行。

    观看此视频演示非常值得一看,以了解 Clojure 的并发方法:

    http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

    Clojure 并发性能的主要技巧是软件事务内存 (STM) 的巧妙实现,它允许您执行许多并发事务,而无需复杂且昂贵的锁定方案。它还使用persistent data structures 为多个版本的数据提供不变性和高效管理。很酷。

    就通用性能而言,Clojure 已经非常快了,并且在新的 1.3 alpha 分支中变得更快。 Rich Hickey(Clojure 的创建者)的一个明确目标是允许您在 Clojure 中以与纯 Java 相同的速度执行任何操作。

    我真正喜欢的 Clojure 中的其他内容,但可能与您相关,也可能与您无关:

    • 功能强大的 LISP 样式宏系统 - “代码就是数据”,您可以这样操作它
    • 这是一种成熟的函数式语言
    • 默认情况下它是动态类型的(用于灵活性和快速原型设计),但您可以根据需要添加静态类型提示(以获得更好的性能)
    • 出色的 JVM/Java 集成,因此您可以利用所有优秀的 Java 库和工具(例如,Netty 用于事件驱动的服务器通信)

    【讨论】:

      【解决方案3】:

      在 Clojure 上,您可以使用 Grizzly 进行异步 http 处理和基于 comet/websockets 的应用程序。 Redis 是缓存和创建强大的分布式会话的绝佳选择,内置 pub/sub 协议 另一件大事是使用RabbitMQZeroMQ 来模拟基于代理的分布式系统,并提供例如组、数据或集成服务。

      【讨论】:

        【解决方案4】:

        是相对的......很多像 clojure 并且部分同意你,其中 clojure 是 jvm 上最快的语言之一。

        但是语言知识是必不可少的,可以确认我们的感受。

        一些关于基准、性能和比较的有趣链接:

        http://bit.ly/dtqHAG

        “过早的优化是万恶之源”,Donald Knuth

        【讨论】:

        • Clojure 可能是 JVM 上最快的 dynamic 语言。它还没有完全赶上 Java 或 Scala 等静态编译语言,尽管它最终可能会到达那里(鉴于类型推断方面的一些创新)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 2012-05-06
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多