Все бенчмарки, которые делались для SObjectizer-а, показывают, что процедура создания/удаления агентов в SO-5 является дорогой даже по сравнению с другими акторными фреймворками (вроде CAF или Akka), не говоря уже про специализированные языки (Erlang, Go). В данный посте попробуем объяснить, почему так происходит, почему это никогда нас, как активных пользователей SO-5, не беспокоило. Ну и обозначить некоторые возможности для улучшения данного показателя.
Размышления и впечатления, которые не хочется держать в себе. О программировании в частности. Ну и о творчестве, и о жизни вообще.
четверг, 18 февраля 2016 г.
[prog.c++] Результаты сравнения производительности SO-5 и CAF
В Wiki проекта SObjectizer добавлена статья на русском языке, в которой представлены результаты сравнения производительности SObjectizer-5.5.15 и CAF-0.14.4. Так что теперь можно предметно отвечать на вопросы о том, кто и где быстрее.
В статье зафиксированы результаты измерений. Где-то мы хорошо понимаем, почему получилось именно так, где-то нужно еще поразбираться и сделать выводы. Если есть вопросы вроде "как?" и "почему?", то задать их можно либо в комментариях к статье, либо прямо здесь.
PS. Статья на русском поскольку так было проще и поскольку есть необходимость предъявлять их русскоязычной аудитории. Над переводом на английский язык будем работать.
среда, 17 февраля 2016 г.
[prog.c++] Ровно год назад, 17-го февраля 2015...
...мы публично заявили о SObjectizer-е на весь мир. Ну или на ту его часть, которая читает reddit :)
Тогда у нас была версия 5.5.3.0, одна обзорная презентация и первая презентация в серии "Dive into SO-5.5". Сейчас версия 5.5.15.2, девять частей в серии "Dive into SO-5.5" и более 1100 загрузок SObjectizer-а с SourceForge.
За прошедший год в SObjectizer добавили: приватные диспетчеры, лимиты для сообщений, вспомогательные методы-фабрики make_agent, средства для мониторинга внутренностей SObjectizer, вспомогательные функции introduce_coop, фильтры для сообщений, приоритеты для агентов и три новых диспетчера с поддержкой приоритетов, класс wrapped_env_t, функции request_value/request_future для синхронных запросов, возможность отсылки сообщений произвольных типов (а не только наследников от message_t), возможность трассировки механизма доставки сообщений, механизм message chains (по сути каналы в стиле CSP), иерархия состояний агентов (агенты могут теперь быть иерархическими конечными автоматами), унифицированные варианты send-функций и обработчиков событий, новые возможности по тонкой настройке SObjectizer (например, queue_locks для диспетчеров)... Плюс к тому, работоспособность SObjectizer теперь доказана не только под Windows и Linux, но и под FreeBSD, MacOS X и Android.
В общем, сделано было много. Огромное спасибо всем, кто помогал и оказывал поддержку.
Тем не менее, останавливаться нельзя. Есть возможность сделать SObjectizer еще мощнее, еще быстрее, еще удобнее, еще гибче и т.д. Чем, собственно, и будем заниматься дальше.