Подтвердить что ты не робот

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

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

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

Итак, мне интересно, как актеры Scala сравниваются с Clojure Агентами? Являются ли агенты по своей природе менее параллельными, чем акторы, или код неэффективно написан (автобоксинг?)?

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

Edit:

Обе версии работают на одном JVM со всеми параметрами JVM и параметрами конфигурации Actor и Agent, заданными по умолчанию. На моей машине версия Scala обеспечивает скорость сообщения около 5000 сообщений/сек последовательно для 100-1 миллиона узлов, тогда как версия Clojure начинается с 60000 сообщений/сек для 100 узлов, которая уменьшается до 200 сообщений в секунду для 1 миллион узлов.

Изменить 2

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

4b9b3361

Ответ 1

[Отказ: я нахожусь в команде Akka]

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

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

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

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