Scala actor比Jetlang和Groovy++消息传递都慢?

来源:互联网 发布:mac有必要贴膜吗 编辑:程序博客网 时间:2024/05/05 05:42

Alex Tkachman用一个测试基准比较Scala actor、Jetlang和Groovy++消息传递的性能差异,并解释了Scala actor比较慢的原因。

该基准用来测量消息发送和接收的的平均速度。我们选择了众所周知的线程环测试基准的一个变体

  • 有10000个actors,0..9999
  • 当object接收一个消息后将其转发给下一个object
  • 测试一开始,向头500个对象发送字符串“Hi”

总共大概有接近50M的消息被发送和接收,我们记录下来整个过程的时间

测试结果如下:

    Benchmarking results (milliseconds, smaller number the better)    2155 - Jetlang    1682 - Groovy++    47911 - Scala //这是原始数据,根据评论中建议修改之后,数据可达5221ms                  //但仍比groovy++显慢,Alex说还会就此话题贴文。

Alex认为造成这一结果的原因是Scala模仿了Erlang的行为,而没有使用更适合JVM的消息传递模型。而Groovy++的实现方式与Jetlang基本一样,主要区别是groovy++选择不区分fiber(消息消费者)和message channel(消息发布地),从而内部可以使用一些简单的数据结构。还有就是Groovy++还不支持Jetlang所支持的一些特性,那些特性对效率多少也会有影响。

0 0