![]() |
|
Модераторы: xvr |
![]()
|
|
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
менеджер БД должен работать в отдельном потоке все обращения к нему асинхронные, запросы кладутся в очередь менеджер проверяет очередь и выполняет их (в целях ускорения юзает multiple statements) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
MAKCim, Спасибо, хорошая идея.
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
А ведь и вправду, долгие операции будут тормозить поток, и все клиенты в этом же потоке, будут ждать завершения.
К примеру, загрузка карты. Пока один клиент загружает, все остальные ждут, и так с каждым В таких случаях, наверное нужно чтоб продолжительные операции выполнялись в отдельном потоке. При том, кол-во этих "отдельных" потоков, нужно определять исходя из конкретной задачи. У кого-то есть какие-то соображения по этому поводу? Может кто-то знает подобный opensource проект, чтоб посмотреть как это реализовано? --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| alx49 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Я когда писал свой сервак, делал специальный watchdog, который в случае, если все рабочие потоки долго заняты, добавлял в пул еще потоки. У меня правда потоки обрабатывали эвенты, тоесть клиент жеско к потоку не привязывался.
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
niXman,
надо разделять ввод-вывод и логику использование неблокируемого ввода-вывода увеличит скорость реакции при большой нагрузке (большом количестве клиентов) однако от тормозов на логике это не избавит пока внешние менеджеры обрабатывают большие по времени выполнения запросы, клиенту можно выдать сообщение типа идет работа и т. д в противном случае (без неблокируемого ввода-вывода) клиент тупо будет ждать, "не понимая" что происходит иными словами, интерактивность хреновая ;) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Loki |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 9.7.2006 Репутация: нет Всего: нет |
хм, а если у меня как-бы потоки создаются в потоке? например есть куча серверных сокетов, на каждый сокет, свой поток и в них в асинхроне я создаю потоки по мере необходимости(для получения данных), потом они терминируются и отдают данные в главный поток(т.е. я использую aio) и в нем же происходит mysql_query(), только вот я не проверяю стейты предидущих данных, т.е. очередей как-бы нет и проблем пока не возникло, хотя вот если добавить фильтрацию, тогда некоторые данные будут тормозиться и тогда наверно придется сооружать очередь, только пока хз как но mutex не прокатит. поток то один.
это у вас наверно epoll был? а если просто потоки приотерезировать то наверно mutex'ами |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |