Clojure的代理与Scala的演员相比如何?
我在Scala(
source here)(Scala 2.8 RC7)和Clojure(
source here)(Clojure 1.1)中编写了
Ring network topology的模拟,用于比较演员和代理。
虽然Scala版本显示几乎恒定的消息交换率,因为我将网络中的节点数量从100增加到1000000,Clojure版本显示随着节点数量的增加而减少的消息速率。此外,在单次运行期间,Clojure版本中的消息速率随着时间的流逝而降低。 所以我很好奇Scala的演员如何比较Clojure的代理?代理固有地比Actors少或是代码低效地写(autoboxing?)? PS:我注意到,Scala版本中的内存使用随着节点数量的增加而增加很多(对于100万个节点大于500MB),而Clojure使用少得多的内存(100万个节点大约100 MB) 。 编辑: 这两个版本都在相同的JVM上运行,所有JVM参数和Actor和代理配置参数设置为默认值。在我的机器上,Scala版本为100到100万个节点提供了大约5000条消息/秒的消息速率,而Clojure版本针对100个节点以60000条消息/秒开始,对于100万个节点减少到200条消息/秒。 编辑2 原来,我的Clojure版本没有有效地写。我将节点集合的类型从列表更改为向量,现在它显示一致的行为:100000消息/秒为100个节点和80000消息/秒为100000个节点。因此Clojure代理似乎比Scala Actors更快。我也更新了链接的源。 解决方法
[免责声明:我在Akka团队]
Clojure代理是与Scala演员不同的野兽,最显着的是如果你想想谁控制的行为。在代理中,行为在外部定义并推送到代理,在Actor中,行为在Actor内部定义。 不知道你的代码什么,我真的不能说太多,你使用相同的JVM参数,变暖的东西相同,明智的设置为代理人对敏感的设置代理,还是单独调整? 作为附注: 很有趣的是看看你的机器上的Clojure测试的结果是什么。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |