提问人:Ariejan 提问时间:11/1/2010 更新时间:10/4/2012 访问量:458
事件驱动应用 - 选择哪种语言或 VM?[已结束]
Eventdriven app - what language or VM to choose? [closed]
问:
我正在考虑编写一个具有以下要求的应用程序。我精通 Ruby,但我愿意学习一门新语言,比如 Scala、Clojure 或 Python。
并发性/最佳性能
这是我的主要目标。它需要非常快,并以体面的方式支持并发。
使用 Redis 作为后端
这不会是一个大问题,redis 有广泛的驱动程序可用,但它可能会影响语言/平台的最终决定。
Websockets 支持
对 websockets 的良好支持是必须的。使用附加库(如 Ruby::EM 的 Cramp)是可以的。
选项
我收集了以下选项:
- Ruby 事件机器
- 蟒蛇扭曲
- 节点 .js
- Clojure
- 斯卡拉
- 爪哇岛
目前,编写原始 C 或汇编程序不是可行的选择。
并发
Ruby 1.9 仍然使用 GIL,因为所有基于 JVM 的解决方案都可以使用原生线程。在这种情况下,我不确定 Node.js。
所选语言对性能有何影响?
问题
你有什么建议,为什么?你有实践经验吗?请启发我(以及 StackOverflow 的其余部分)
答:
Clojure 的速度大约是 node.js 的两倍,比 Python 快三倍,Python 被认为比 ruby 快。
评论
在 Clojure 上,你可以使用 Grizzly 进行异步 http 处理和基于 comet/websockets 的应用程序。 Redis 是缓存和创建内置发布/订阅协议的强大分布式会话的绝佳选择 另一件大事是使用 RabbitMQ 或 ZeroMQ 来模拟基于代理的分布式系统,并提供例如组、数据或集成服务。
是相对的......非常喜欢 clojure,并且部分同意你的看法,其中 clojure 是 JVM 上最快的语言之一。
但是语言知识是必不可少的,可以证实我们的感受。
关于基准测试、性能和比较的一些有趣的链接:
“过早的优化是万恶之源”,唐纳德·克努斯 (Donald Knuth)
评论
如果高性能并发是你的主要标准,我会投票给 Clojure。Clojure 从一开始就基本上是为并发开发而设计的,并且已经有一些令人印象深刻的 Clojure 演示运行在 800+ 核心的 Azul 盒子上。
非常值得一看这个视频演示,以了解 Clojure 的并发方法:
http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey
Clojure 并发性能的主要技巧是软件事务内存 (STM) 的巧妙实现,它允许您执行许多并发事务,而无需复杂且昂贵的锁定方案。它还使用持久数据结构来提供对多个版本数据的不变性和高效管理。这很酷。
至于通用性能,Clojure 已经非常快了,而且随着新的 1.3 alpha 分支的推出,速度甚至更快。Rich Hickey(Clojure 的创建者)的一个既定目标是让你在 Clojure 中以与纯 Java 相同的速度做任何事情。
Clojure 中我非常喜欢但可能与您相关,也可能与您无关的其他内容:
- 非常强大的LISP风格的宏系统 - “代码就是数据”,你可以这样操作它
- 它是一种成熟的函数式语言
- 默认情况下,它是动态类型的(为了灵活性和快速原型设计),但如果需要,您可以添加静态类型提示(以获得更好的性能)
- 出色的 JVM/Java 集成,因此您可以利用所有优秀的 Java 库和工具(例如,用于事件驱动服务器通信的 Netty)
评论