代码之家  ›  专栏  ›  技术社区  ›  Ariejan

事件驱动的应用程序-选择什么语言或虚拟机?[关闭]

  •  2
  • Ariejan  · 技术社区  · 15 年前

    我正在考虑编写一个具有以下要求的应用程序。我精通Ruby,但我愿意学习一种新的语言,比如scala、clojure或python。

    并发性/最佳性能

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

    使用Redis作为后端

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

    WebSockets支持

    必须对WebSockets提供良好的支持。使用一个附加库(比如crmp for ruby::em)是可以的。

    选项

    我收集了以下选项:

    • Ruby事件机
    • 巨蟒扭曲
    • 节点.js
    • Clojure公司
    • 斯卡拉
    • 爪哇

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

    并发性

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

    所选语言如何影响性能?

    问题

    你推荐什么?为什么?你有实践经验吗?请告诉我(还有stackoverflow的其余部分)

    4 回复  |  直到 15 年前
        1
  •  4
  •   mikera    15 年前

    如果高性能并发性是您的主要标准,我将投票支持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(Culjule的创造者)的一个既定目标是允许你以同样的速度在Culjure中做任何事情,你可以做到纯Java。

    我真的喜欢Clojure的其他事情,但可能与你有关,也可能与你无关:

    • 非常强大的lisp样式宏系统-“代码就是数据”,您可以这样操作它
    • 它是一种成熟的功能语言
    • 默认情况下,它是动态类型化的(为了灵活性和快速原型化),但是如果需要,您可以添加静态类型提示(为了更好的性能)
    • 优秀的JVM/Java集成,因此您可以利用所有优秀的Java库和工具(例如)。 Netty 用于事件驱动的服务器通信)
        2
  •  6
  •   Will    15 年前
        3
  •  4
  •   Ilia Choly    13 年前

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

        4
  •  2
  •   william gouvea    15 年前

    是相对的…A和Clojure非常相似,并且在某些方面与您达成了一致,其中Clojure是JVM上最快的语言之一。

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

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

    http://bit.ly/dtqHAG

    “过早的优化是万恶之源”,作者DonaldKnuth

    推荐文章