实时能力?

时间:2011-08-09 20:05:20

标签: clojure

在过去的几周里,我一直在学习和试验Clojure和Erlang。根据我的理解,两者都解决了相同类型的问题 - 但是 - 采用不同的方法。如果这是正确的,那么Clojure对于像聊天应用程序或自动收录工厂这样的实时系统是否可行,就像Erlang一样?

3 个答案:

答案 0 :(得分:7)

Clojure而言,它可以提供与底层Java VirtualMachine一样多的实时功能。

CAN 使用JVM创建硬实时系统,但这不仅仅是Clojure提供的语言语法。

根据您的实时要求,您似乎需要调整JVM(这是一个很好的IBM Works article或使用特定的JVM,如Fiji JVM

关于Erland,已经有一个相关的questions on SO

使用这两种语言可以实现聊天和自动收录工厂应用程序,但我个人怀疑使用Clojure进行部署会更容易,特别是在云端(Heroku)和常规托管服务中查看要约。

答案 1 :(得分:6)

虽然在不同的环境中解决了并发编程问题:

  • Clojure非常擅长共享内存并发编程。有许多线程都在单个大块内存(堆)上工作,并且需要协调对该内存中共享对象的访问。
  • Erlang非常擅长共享任何分布式计算,其中进程需要能够在许多计算机上运行并在独立的内存空间上工作。它们不协调对象的共享访问。

这两个系统都是“软实时”,非常适合聊天和控制系统等,但它们都不适合具有硬实时要求的系统。

答案 2 :(得分:1)

是的,Clojure是(软)实时应用程序的一个非常可行的选择。

您基本上可以获得与JVM上的任何其他内容等效的实时性能。由于人们将JVM用于实时交易平台(例如These guys),我确信它可以用于聊天或股票行情。

Clojure特别适合访问共享状态的高度并发应用程序,因为它有一个非常好的model of Software Transactional Memory,可以很好地扩展大量线程/大量内核。我相信Rich Hickey的某个视频在768核Azul系统盒上展示了一个并发的Clojure应用程序而没有任何问题。

你可以将它与Erlang进行对比,Erlang是为高度分散的不共享状态的角色而设计的。这为Erlang应用程序提供了跨机器集群的巨大冗余和可扩展性,但每个进程都可以管理它自己的独立状态。