2010-11-01 44 views
2

我正在考慮編寫一個具有以下要求的應用程序。我精通Ruby,但我願意學習像Scala,Clojure或Python這樣的新語言。事件驅動的應用程序 - 選擇什麼語言或虛擬機?

併發/最佳性能

這是我的主要目標。它需要非常快速並且以體面的方式支持併發。

使用Redis的作爲後端

這會不會是一個大問題,Redis的具有廣泛可用的驅動程序,但它可能會影響語言/平臺上的最終決定。

的WebSockets支持

對的WebSockets的良好支持是必須的。使用附加庫(比如Cramp for Ruby :: EM)是可以的。

選項

我已經收集了以下選項:

  • 紅寶石EventMachine的
  • Python的扭
  • Node.js的
  • Clojure的
  • 斯卡拉
  • Java

寫入原始C或彙編程序目前不是可行的選項。

併發

Ruby 1.9中仍然使用GIL,那裏的所有基於JVM的解決方案可以使用本地線程。在這種情況下,我不確定Node.js。

所選語言如何影響性能?

問題

你有什麼建議,爲什麼?你有實踐經驗嗎?請賜教我(以及StackOverflow的其餘部分)

回答

4

我會投票給Clojure的,如果高性能併發性是您的主要標準。 Clojure從一開始就基本上是designed for concurrent development,並且在800多個核心Azul盒子上運行了一些令人印象深刻的Clojure演示。

這是非常值得看這個視頻演示,瞭解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 l那裏的庫和工具(例如用於事件驅動的服務器通信的Netty
6
+1

請小心諸如此類的粗略概括。這些各種平臺的真實比較性能依賴於工作負載。 – sblom 2010-11-01 15:45:41

+0

同意但aleph是一個非常酷的項目,即使它不快2-3倍,也應該查看它。 – nickik 2010-11-01 15:52:16

+1

我必須說我已經發現這些概括總體上是準確的,並且我已經玩過了JVM和Python Tornado並且Twisted – Will 2010-11-01 16:30:37

4

在Clojure上,您可以使用Grizzly進行異步http處理和基於彗星/ websockets的應用程序。 Redis是一個很好的選擇,可以通過內置的pub/sub協議來緩存和創建強大的分佈式會話 另一件大事是使用RabbitMQZeroMQ來模擬基於代理的分佈式系統並提供組,例如數據或集成服務。

2

是相對的...像clojure很多,並與你的部分同意,其中clojure是jvm上最快的語言之一。

但是語言知識是必不可少的,可以證實我們的感受。

的基準,性能和比較一些相關鏈接:

http://bit.ly/dtqHAG

「過早的優化是所有罪惡的根源」,由高德納

+0

Clojure可能是JVM上最快的* dynamic *語言。它還沒有完全趕上像Java或Scala這樣的靜態編譯語言,儘管它最終可能會到達那裏(鑑於類型推理中的一些創新) – mikera 2012-04-24 01:20:37

相關問題