Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Таймеры и их количество

iTrue

Начинающий
Пользователь
Регистрация
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, с хорошей и правильной структурой кода


На этом пожалуй я закончу, думаю вам было интересно прочитать данную статью.
А так же вы не жалеете что зря потеряли время.

Спасибо за внимание​
 
Последнее редактирование:
Сверху Снизу