Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игровой сервер. Linux. Помогите реализовать. 
:(
    Опции темы
nerezus
Дата 20.10.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

любой запрос любого ресурса можно разбить на ряд мелких, для выполнения которых не нужно блокировать процесс/поток
 допустим mysql_query() - его разбить нельзя. И пока обрабатывается этот запрос, остальные клиенты в этом потоке будут ждать. не так ли?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 21.10.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(nerezus @  20.10.2009,  22:57 Найти цитируемый пост)
допустим mysql_query() - его разбить нельзя. И пока обрабатывается этот запрос, остальные клиенты в этом потоке будут ждать. не так ли? 

менеджер БД должен работать в отдельном потоке
все обращения к нему асинхронные, запросы кладутся в очередь
менеджер проверяет очередь и выполняет их (в целях ускорения юзает multiple statements)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
niXman
Дата 21.10.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



MAKCim, Спасибо, хорошая идея.
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
niXman
Дата 21.10.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



А ведь и вправду, долгие операции будут тормозить поток, и все клиенты в этом же потоке, будут ждать завершения.
К примеру, загрузка карты. Пока один клиент загружает, все остальные ждут, и так с каждым smile Об этом я не подумал.
В таких случаях, наверное нужно чтоб продолжительные операции выполнялись в отдельном потоке. При том, кол-во этих "отдельных" потоков, нужно определять исходя из конкретной задачи.

У кого-то есть какие-то соображения по этому поводу?
Может кто-то знает подобный opensource проект, чтоб посмотреть как это реализовано?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
alx49
Дата 21.10.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 20.10.2009

Репутация: нет
Всего: нет



Я когда писал свой сервак, делал специальный watchdog, который в случае, если все рабочие потоки долго заняты, добавлял в пул еще потоки. У меня правда потоки обрабатывали эвенты, тоесть клиент жеско к потоку не привязывался.
PM MAIL   Вверх
MAKCim
Дата 21.10.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



niXman, 
надо разделять ввод-вывод и логику
использование неблокируемого ввода-вывода увеличит скорость реакции при большой нагрузке (большом количестве клиентов)
однако от тормозов на логике это не избавит
пока внешние менеджеры обрабатывают большие по времени выполнения запросы, клиенту можно выдать сообщение типа идет работа и т. д
в противном случае (без неблокируемого ввода-вывода) клиент тупо будет ждать, "не понимая" что происходит
иными словами, интерактивность хреновая ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Loki
Дата 25.10.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 9.7.2006

Репутация: нет
Всего: нет



Цитата

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

хм, а если у меня как-бы потоки создаются в потоке? например есть куча серверных сокетов, на каждый сокет, свой поток и в них в асинхроне я создаю потоки по мере необходимости(для получения данных), потом они терминируются и отдают данные в главный поток(т.е. я использую aio) и в нем же происходит mysql_query(), только вот я не проверяю стейты предидущих данных, т.е. очередей как-бы нет и проблем пока не возникло, хотя вот если добавить фильтрацию, тогда некоторые данные будут тормозиться и тогда наверно придется сооружать очередь, только пока хз как но mutex не прокатит. поток то один.
Цитата

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

это у вас наверно epoll был? а если просто потоки приотерезировать то наверно mutex'ами
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.