我写的模拟环网拓扑 Scala中(源在这里)(斯卡拉2.8 RC7)和Clojure的(来源这里为行为者和代理人的比较)(Clojure的1.1)。
当我将网络中的节点数从100增加到1000000时,Scala版本显示出几乎恒定的消息交换率,而Clojure版本显示出消息率随着节点数的增加而降低。同样,在单次运行期间,Clojure版本的消息速率会随着时间的流逝而降低。
所以我很好奇Scala的演员与Clojure的特工相比如何?Agent本质上是否比Actor少并发,或者代码编写效率低下(自动装箱?)?
PS:我注意到,Scala版本中的内存使用量随着节点数量的增加而大大增加(对于100万个节点,> 500 MB),而Clojure则使用更少的内存(对于100万个节点,则为100 MB)。
编辑:
两种版本都在同一JVM上运行,并且所有JVM args以及Actor和Agent配置参数均设置为默认值。在我的机器上,Scala版本对于100到100万个节点始终提供大约5000条消息/秒的消息速率,而Clojure版本从1000000个节点的60000条消息/秒开始,对于100万个节点降低到200条消息/秒。
编辑2
原来我的Clojure版本编写得很低。我将nodes集合的类型从更改list为vector,现在它显示出一致的行为:100个节点100000消息/秒,100000节点80000消息/秒。因此Clojure特工似乎比Scala演员快。我也更新了链接源。