Например, диспетчеру с активными группами нужно было захватить собственный мутекс, найти агента в списках активных групп, затем найти нить, соответствующую данной активной группе, затем передать заявку на диспетчеризацию этой работчей нити. Если же агент не принадлежал ни одной активной группе, то заявка передавалась подчиненному диспетчеру и т.д.
В версии 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. Создано системой 1.5.6 |