PDA

Просмотр полной версии : [Вопрос] Индивидуальные таймеры



Profyan
09.11.2015, 19:13
Здравствуйте. Не так давно, почитал несколько статей по оптимизации таймеров, т.е обновления каких-то систем.Самые адекватные варианты :
1) Создать таймер на 1 секунду, и в этой функции с помощью gettime() уже вызывать остальные системы и.т.д.
2) Создавать каждому игроку таймер при подключении к серверу и вызывать им функцию.В эту функцию весь код, относящийся к игроку. И "Убивать" таймер, когда игрок вышел с сервера.(Много таймеров, но они не нагружают процессор, но минус в том, что время таймера нужно указывать наименьшее значение, которое используется в системах)

Не могу протестировать самостоятельно на практике, т.к не имею онлайна.Если есть какие-то другие способы - опишите, если не трудно.
Спасибо.

Sp1ke
09.11.2015, 19:24
Здравствуйте. Не так давно, почитал несколько статей по оптимизации таймеров, т.е обновления каких-то систем.Самые адекватные варианты :
1) Создать таймер на 1 секунду, и в этой функции с помощью gettime() уже вызывать остальные системы и.т.д.
2) Создавать каждому игроку таймер при подключении к серверу и вызывать им функцию.В эту функцию весь код, относящийся к игроку. И "Убивать" таймер, когда игрок вышел с сервера.(Много таймеров, но они не нагружают процессор, но минус в том, что время таймера нужно указывать наименьшее значение, которое используется в системах)

Не могу протестировать самостоятельно на практике, т.к не имею онлайна.Если есть какие-то другие способы - опишите, если не трудно.
Спасибо.

Я лично использую второй способ, считаю что лучше создать 1000 таймеров, которые обновляются в разное время, пусть даже 1 мс будет разницой, но они пойдут на обработку других систем/команд/информации. Чем одновременно обновлять 1000 игроков.

L0ndl3m
09.11.2015, 20:16
Я лично использую второй способ, считаю что лучше создать 1000 таймеров, которые обновляются в разное время, пусть даже 1 мс будет разницой, но они пойдут на обработку других систем/команд/информации. Чем одновременно обновлять 1000 игроков.
Большая ошибка.

Sp1ke
09.11.2015, 21:56
Большая ошибка.

Ну тогда поправь меня, я представлял это себе так.

Profyan
11.11.2015, 16:22
Большая ошибка.

А твоя какая позиция, относительно этого?

Profyan
15.11.2015, 21:12
Внятного ответа так и не дали. UP

Daniel_Cortez
15.11.2015, 21:27
В принципе возможны такие ситуации, когда сервер обрабатывает всех игроков в одном таймере и не может в это время обновлять инфу о синхронизации игроков. Из-за этого могут возникнуть "скачки" в синхронизации.
Нормальным решением обычно будет переписать говнокод, чтобы снизить нагрузку, но в редких случаях (или в частых, зависит от лени скриптера/быдлокодера) это может не помочь - тогда есть смысл вместо цикла по всем игрокам устанавливать таймеры для обработки каждого игрока индивидуально. Но нет никакой гарантии, что таймеры распределятся достаточно ровно по времени, а не будут выполняться примерно в один момент. К тому же, добавится ещё немного нагрузки из-за планировщика таймеров.

Profyan
16.11.2015, 09:53
В принципе возможны такие ситуации, когда сервер обрабатывает всех игроков в одном таймере и не может в это время обновлять инфу о синхронизации игроков. Из-за этого могут возникнуть "скачки" в синхронизации.
Нормальным решением обычно будет переписать говнокод, чтобы снизить нагрузку, но в редких случаях (или в частых, зависит от лени скриптера/быдлокодера) это может не помочь - тогда есть смысл вместо цикла по всем игрокам устанавливать таймеры для обработки каждого игрока индивидуально. Но нет никакой гарантии, что таймеры распределятся достаточно ровно по времени, а не будут выполняться примерно в один момент. К тому же, добавится ещё немного нагрузки из-за планировщика таймеров.

Если я правильно понял, тот и другой вариант имеет место быть. И особой разницы между ними нет, т.к нет абсолютного преимущества ни у кого.Тогда все зависит от самого кода и общей оптимизации мода!Спасибо