so_4: Версия 4.4.0. Привязка агентов к диспетчеру

В версии 4.4.0-beta6 была изменена схема передачи заявок на выполнение событий агентов диспетчеру. Ранее все сгенерированные в процессе диспетчеризации сообщения передавались диспетчеру, а диспетчер выяснял на какую рабочую нить следует передать каждую из заявок. Что приводило к возникновению узких мест в диспетчерах.

Например, диспетчеру с активными группами нужно было захватить собственный мутекс, найти агента в списках активных групп, затем найти нить, соответствующую данной активной группе, затем передать заявку на диспетчеризацию этой работчей нити. Если же агент не принадлежал ни одной активной группе, то заявка передавалась подчиненному диспетчеру и т.д.

В версии 4.4.0-beta6 данная схема была изменена, поскольку сейчас агент всегда связан с одной и той же нитью. Поэтому, при диспетчеризации заявки можно передавать ее сразу рабочей нити, если информация о ней есть в агенте. И теперь эта информация в агенте есть.

В SObjectizer добавлен интерфейс so_4::rt::dispatcher_binding_t, за которым скрывается рабочая нить диспетчера, к которой привязан агент. Агент сейчас хранит указатель на свой dispatcher_binding_t. Этот указатель задается агенту в процессе регистрации агента.

Для поддержки данной схемы был изменен интерфейс so_4::rt::dispatcher_t. Сейчас SObjectizer Run-Time передает диспетчеру агента в метод so_4::rt::dispatcher_t::setup_dispatcher_binding(). Диспетчер должен найти рабочую нить для агента и передать информацию о ней указанному агенту в виде указателя на соответствующий dispatcher_binding. Таким образом, после выполнения процедуры регистрации агент оказывается привязанным к своей рабочей нити.


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo