加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Clojure的代理与Scala的演员相比如何?

发布时间:2020-12-16 09:47:19 所属栏目:安全 来源:网络整理
导读:我在Scala( source here)(Scala 2.8 RC7)和Clojure( source here)(Clojure 1.1)中编写了 Ring network topology的模拟,用于比较演员和代理。 虽然Scala版本显示几乎恒定的消息交换率,因为我将网络中的节点数量从100增加到1000000,Clojure版本显示随着节点
我在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参数,变暖的东西相同,明智的设置为代理人对敏感的设置代理,还是单独调整?

作为附注:
Akka有一个环形长凳的实施位于这里:http://github.com/jboner/akka-bench/tree/master/ring/

很有趣的是看看你的机器上的Clojure测试的结果是什么。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读