Вопрос

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

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

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

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

Редактировать:

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top