Clojure的STM模型可以在多个JVM上运行吗?

时间:2011-04-21 16:13:50

标签: clojure

我知道Clojure在多核计算机上运行良好,但我想知道它是否适用于在多台计算机上分布的JVM集群?

4 个答案:

答案 0 :(得分:6)

Runa为此考虑使用Terracotta,最后将swarmiji发布为分布式代理库。

SMP系统和群集之间的真正区别之一是共享内存。在集群中,代码必须要求数据,而在SMP中,它可以直接读取数据。这有一些很好的优点和一些(缩放)缺点。

Clojure的STM与其他许多STM系统差别很大,建立在相对时间的概念之上,由每个事务的生成计数器测量。如果没有对这一代计数器的共同访问,它就不能给事件一个订单,也不能完成它的工作(请原谅这个过于简单的解释)。

STM的一个主要动机是创建一个真正利用共享内存并发的系统,例如,确保读者永远不会等待作者和读者始终看到有效数据。因为它是为了利用共享内存而构建的,所以它没有共享内存就会失去很大的吸引力。

演员模型(ala Erlang)更适合分布式计算。

或者换句话说:也许我们不应该试图在分布式并发漏洞中放置方形挂钩。

答案 1 :(得分:5)

不是真的。我的意思是,可能可以工作;像Terracotta这样的东西声称能够在多个节点上分配逻辑JVM,但是clojure的STM /集合语义非常强烈地依赖于线程间内存共享,以便在空间和时间上高效。

您可能最好使用消息传递或面向批处理的体系结构来处理系统的多节点部分。

答案 2 :(得分:3)

我能做到,但这不是一个好主意。 NoSql现在有一个很大的原因,因为交易不能很好地发挥作用。

答案 3 :(得分:1)

Avout项目允许您在多台计算机上分发STM状态: