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所支持的一些特性,那些特性對效率多少也會有影響。scala
對此話題及測試代碼感興趣的讀者能夠閱讀原文。code