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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GC на игровом сервере 
:(
    Опции темы
Vadimik
Дата 14.7.2015, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется блокируемая очередь сообщений и обрабатывающие потоки для этой очереди (раньше был один такой поток, но захотелось больше 1). Каждое сообщение имеет свой объект User (сервер игровой - User содержит различные игровые переменные) и пришедший от него пакет данных, с кототорыми и работают потоко. При этом потоки могут при необходимости запрашивать чужие объекты User. Проблема в том, что когда приходит пакет размером 0 (клиент отключился) - нужно данный объект User, выделенный в хипе, удалить, то неизвествено работают ли с этим объектом другие потоки. 
Пока я использую потокобезапасные умные указатели с подсчетом ссылок. но: существуют ли другие решения этой проблемы? есть ли open-source подобные сервера? и не выгоднее в плане производительности переписать сервер на java?
PM MAIL   Вверх
feodorv
Дата 15.7.2015, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Vadimik @  14.7.2015,  22:04 Найти цитируемый пост)
Пока я использую потокобезапасные умные указатели с подсчетом ссылок.

Хорошее, кстати, решение. Вопрос только, как Вы их используете...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Vadimik
Дата 15.7.2015, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



feodorv,  если вы про их подводные камни, например, циклические ссылки, то в моей задаче таких пробелм быть не может
PM MAIL   Вверх
tzirechnoy
Дата 15.7.2015, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Цитата
существуют ли другие решения этой проблемы?


Конечно. Масса. Например, использовать не подсчёт ссылок, а классический обход для garbage collection. Или, например, удалять объект сразу, и при удалении - обходить все места, в которых он мог быть запомнен (сверху вниз -- т.е. от твоей очереди или от полного списка игровых досок, или снизу вверх -- запоминать в объекте все ссылки на объекты, которые его используют), и везде, где найдёшь -- обнулять этот объект. Возможно, опять очередью на отложэнное действие для сериализацыи, если объект заблокирован.
Ну, и проверять каждый раз доступность объекта при попытке доступа к нему (благо, в C++ для этого достаточно правильно написать его класс).
 Или, например, вообще не удалять объекты user до перезагрузки сервера. Если пользователи -- регистрируются, то их будет немного, какие-то сотни тысяч, можно всегда держать в памяти.

 В общем, можно выдумать кучу решэний -- но чем тебя текущее неустраивает? Вполне вариант.

Цитата
и не выгоднее в плане производительности переписать сервер на java?


В плане производительности обычно выгоднее всего -- применять профайлер и мозг.
PM MAIL   Вверх
Vadimik
Дата 15.7.2015, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(tzirechnoy @  15.7.2015,  01:19 Найти цитируемый пост)
Цитатасуществуют ли другие решения этой проблемы?Конечно. Масса. 


Здесь вы меня поймали - имел в виду более рациональное решение.

Просто у меня щас кривая реализация умных уазателей, хотя если переменные кол-во ссылок вставить в сам User и использовать атомарные операции, то получиться неплохой вариант.

Касательно gc, у меня тоже была идея его реализовать, то почему бы не сделать его с дефрагментацией. А раз есть другие объекты подобные User, то можно использовать gc java (в то же время это его и слабое место, не считая прожорливость по памяти) - это меня и навело на мысль о java



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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Vadimik @  15.7.2015,  02:28 Найти цитируемый пост)
если переменные кол-во ссылок вставить в сам User

Гм. А как сейчас у Вас?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Vadimik
Дата 16.7.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



feodorv, сейчас это я уже исправляю. А было сделано (торопился тогда и взял готовую реализацию)  через map <User *, int> да ещё и обернут мьютексом. 
PM MAIL   Вверх
feodorv
Дата 16.7.2015, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Тогда, да, это не оптимальный вариант.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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