Как агенты Clojure выдерживают сравнение с агентами Scala?

Я записал моделирование Кольцевой топологии сети в Scala (источник здесь) (Scala 2.8 RC7) и Clojure (источник здесь) (Clojure 1.1) для сравнения Агентов и Агентов.

В то время как версия Scala показывает почти постоянный уровень обмена сообщениями, поскольку я увеличиваю число узлов в сети от 100 до 1 000 000, версия Clojure показывает скорости передачи сообщений, которые уменьшаются с увеличением количества узлов. Также во время единственного выполнения, скорость передачи сообщений в версии Clojure уменьшается как передачи времени.

Таким образом, мне любопытно на предмет того, как Агенты Scala выдерживают сравнение с Агентами Clojure? Агенты по сути менее параллельны, чем Агенты, или разве код неэффективно написан (автоупаковка?)?

PS: Я отметил, что использование памяти в версии Scala увеличивается много с увеличением количества узлов (> 500 МБ для 1 миллиона узлов), в то время как Clojure каждый использует намного меньше памяти (~ 100 МБ для 1 миллиона узлов).

Править:

И версии работают на той же JVM со всей JVM args и установленными по умолчанию параметрами конфигурации Агента и Агента. На моей машине версия Scala дает скорость передачи сообщений приблизительно 5 000 сообщений/секунда последовательно для 100 к 1 миллиону узлов, тогда как версия Clojure запускается с 60 000 сообщений/секунда для 100 узлов, которые уменьшаются к 200 сообщениям/секунда для 1 миллиона узлов.

Редактирование 2

Оказывается, что моя версия Clojure была неэффективно записана. Я изменил тип nodes набор от list кому: vector и теперь это показывает последовательное поведение: 100 000 сообщений/секунда для 100 узлов и 80 000 сообщений/секунда для 100 000 узлов. Таким образом, Агенты Clojure, кажется, быстрее, чем Агенты Scala. Я обновил связанные источники также.

27
задан Ken Bloom 16 July 2010 в 14:39
поделиться

1 ответ

[Отказ от ответственности: я в команде Akka]

Агент Clojure отличается от агента Scala, прежде всего, если вы думаете о том, кто контролирует поведение. В агентах поведение определяется снаружи и подталкивается к агенту, а в акторах поведение определяется внутри актора.

Не зная ничего о вашем коде, я действительно не могу сказать многого, используете ли вы одни и те же параметры JVM, греете ли вы все одинаково, разумные настройки для Actors против разумных настроек для Agents, или они настроены отдельно?

В качестве побочного замечания: Akka имеет реализацию кольцевого стенда, расположенную здесь: http://github.com/jboner/akka-bench/tree/master/ring/

Было бы интересно посмотреть на результат по сравнению с вашим тестом Clojure на вашей машине.

28
ответ дан 28 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: