Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи

Важная информация

Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.

Если кто-то хочет задать вопрос по патчу - велкам.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.06.2010, 21:30   #1
Astellar
Гость
 
Сообщений: n/a
По умолчанию [a bit of research] ACE Reactor usage.

Дело было вечером, делать было нечего...

Решил я подробнее посмотреть на их использование в ядре. И не зря, сразу нашёл к чему придраться.
Код:
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
    ACE_Reactor::instance(new ACE_Reactor(new ACE_Dev_Poll_Reactor(ACE::max_handles(), 1), 1), true);
#else
    ACE_Reactor::instance(new ACE_Reactor(new ACE_TP_Reactor(), true), true);
#endif
Это код из realmd. Вопрос один. Почему здесь используется ACE_TP_Reactor? Он специально разрабатывался для работы в пуле потоков, т.е. способен выполнять функцию run_reactor_event_loop параллельно, без боязни возникновения коллизий. Для поддержания подобного механизма работы, этот реактор накормлен дополнительными блокировками, в результате чего стал более неповоротливым.

И как мы его используем? Мы не создаем пул потоков. Мы продолжаем использовать его как обычный ACE_Select_Reactor, впустую тратя ресурсы на блокировки и прочее.

Использование ACE_TP_Reactor "по ГОСТу" выглядит следующим образом (внимание, не полный код).
Код:
static ACE_THR_FUNC_RETURN event_loop(void *arg)
{
    ACE_Reactor *reactor = static_cast<ACE_Reactor*>(arg);

    // No-op for TP reactor, but useful for others
    reactor->owner(ACE_Thread::self());

    reactor->run_reactor_event_loop();
}

void main(int, char **)
{
    ACE_Reactor::instance
        (new ACE_Reactor(new ACE_TP_Reactor, 1), 1);

    ACE_Thread_Manager::instance()->spawn_n
        (reactor_thread_num, event_loop, ACE_Reactor::instance());

    return ACE_Thread_Manager::instance()->wait();
}
P.S. Вообще я проводил сравнение производительности реакторов под Linux. По итогам этого сравнения лидирует ACE_Select_Reactor с приличным отрывом, а отнюдь не Dev Poll. Могу выложить в эту тему результаты, но там реально много буковок получится.

Последний раз редактировалось Astellar; 24.06.2010 в 22:31.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
ANTOMA (25.06.2010), KiriX (24.06.2010)
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10695] Cleanup some death state enums usage. newsbot CMaNGOS Commits 0 08.11.2010 01:50
Character stat research HarpyWar Прочая документация 36 30.07.2010 11:07
Creature typeflags research. newsbot CMaNGOS Commits 0 02.07.2010 04:54
[10081][idea] Drop usage of DOTCONFDocument. Astellar Принятые патчи 8 20.06.2010 00:55
[9723] Finaly cleanup usage ventorslot values. newsbot CMaNGOS Commits 0 10.04.2010 23:30


Текущее время: 07:40. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot