在过去的几周里,我一直在学习和试验Clojure和Erlang。根据我的理解,两者都解决了相同类型的问题 - 但是 - 采用不同的方法。如果这是正确的,那么Clojure对于像聊天应用程序或自动收录工厂这样的实时系统是否可行,就像Erlang一样?
答案 0 :(得分:7)
就Clojure而言,它可以提供与底层Java VirtualMachine一样多的实时功能。
您 CAN 使用JVM创建硬实时系统,但这不仅仅是Clojure提供的语言语法。
根据您的实时要求,您似乎需要调整JVM(这是一个很好的IBM Works article或使用特定的JVM,如Fiji JVM
关于Erland,已经有一个相关的questions on SO
使用这两种语言可以实现聊天和自动收录工厂应用程序,但我个人怀疑使用Clojure进行部署会更容易,特别是在云端(Heroku)和常规托管服务中查看要约。
答案 1 :(得分:6)
虽然在不同的环境中解决了并发编程问题:
这两个系统都是“软实时”,非常适合聊天和控制系统等,但它们都不适合具有硬实时要求的系统。
答案 2 :(得分:1)
是的,Clojure是(软)实时应用程序的一个非常可行的选择。
您基本上可以获得与JVM上的任何其他内容等效的实时性能。由于人们将JVM用于实时交易平台(例如These guys),我确信它可以用于聊天或股票行情。
Clojure特别适合访问共享状态的高度并发应用程序,因为它有一个非常好的model of Software Transactional Memory,可以很好地扩展大量线程/大量内核。我相信Rich Hickey的某个视频在768核Azul系统盒上展示了一个并发的Clojure应用程序而没有任何问题。
你可以将它与Erlang进行对比,Erlang是为高度分散的不共享状态的角色而设计的。这为Erlang应用程序提供了跨机器集群的巨大冗余和可扩展性,但每个进程都可以管理它自己的独立状态。