- Регистрация
- 7 Авг 2018
- Сообщения
- 42
- Лучшие ответы
- 1
- Репутация
- 5
Здраствуйте уважаемые коллеги.
Сегодня я хочу рассказать вам почему не стоит использовать множество таймеров.
Сегодня я хочу рассказать вам почему не стоит использовать множество таймеров.
Все чаще и чаще я стал замечать среди кодеров на разных порталах довольно ложные советы.
Один из таких советов который меня больше всего задел, это советы о создание таймеров для каждого игрока к примеру при авторизации игрока.
Если честно я и сам около пары лет назад придерживался мнения что мне стоит использовать множество таймеров.
Но немного подумав, сделав несколько тестирований на разном оборудования я понял несколько вещей.
И тут пожалуй начинается самое интересное.
По стандарту сервер получает обновление каждые 5 миллисекунд.
Вывод о этом можно сделать изходя из значение sleep которое ровно 5.
Свойственно сервер по умолчанию в идеале выполняет 200 ProgressTick в секунду.
А теперь вернемся к таймерам.
Предположим у нас играет 1000 человек. На каждого из которых мы создаем по 1 таймеру SetTimerEx.
Что мы получаем на выходе? Порядком 200000 проверок на таймер в секунду. [1000 * 200 = 200000].
А теперь предположим что у нас на игрока создан далеко не 1 таймер, а допустим 5.
Что получим? Да особо ничего, всего порядком миллиона проверок на таймеры игрока в секунду. [((1000 * 200) * 5) = 1.000.000
Не стоит забывать что pawn медлителен, и в примерных значениях 1 миллион проверок будет равен примерно циклу в 100.000 итераций на секунду
Cразу хочу сказать слово о оборудование.
Если вы думаете что более мощное оборудование исправит вашу ситуацию, то вы от части ошибаетесь.
Взяв оборудование с процессором 2.5GHz или 3.5GHz разница будет настолько мала, что в большей степени вы зря потратите свои деньги
Какой вывод стоит сделать из всего вышесказанного?
Не слушать людей которые говорят таймеры нагрузки не несут а несет ее только код в таймере.
Использовать 1 глобальный таймер с циклов на MAX_PLAYERS или GetPlayerPoolSize, с хорошей и правильной структурой кода
Использовать 1 глобальный таймер с циклов на MAX_PLAYERS или GetPlayerPoolSize, с хорошей и правильной структурой кода
На этом пожалуй я закончу, думаю вам было интересно прочитать данную статью.
А так же вы не жалеете что зря потеряли время.
Спасибо за внимание
А так же вы не жалеете что зря потеряли время.
Спасибо за внимание
Последнее редактирование: