Просто выходи так, что боремся за эти 0.04-0.08ms жертвуя 0.5-1ms при каждом подключении отключении игрока. Это я про foreach.
Считаем... Возьмем 50 человек онлайн, любой гф сервер, в среднем в минуту заходит и выходит 3 человека. В то время как за эту минуту выполняется 4 секундных таймера, с циклом на всех игроков, и один десятисекундный. Считаем? Считаем.
4*60+6=246 выполнений цикла в минуту, плюс всевозможные функции.
считаем... в минуту получается. MAX_PLAYERS 920*246=226320мс в минуту на выполнение циклов.
foreach(исходим из того что сейчас 50 человек онлайн, 2мс на игрока) 2*50*246=24600мс в минуту на выполнение циклов к этому 500*6(на входы выходы) 27600мс
Делаем простой вывод, foreach в 10 раз продуктивнее MAX_PLAYERS, и в 5 раз способа с глобальной переменной максимального количества игроков.
Добавлено (02.05.2011, 23:59) --------------------------------------------- А, и да, во всех подсчетах до меня, из которых я исходил, при MAX_PLAYERS и подобных не учитывались проверки на IsPlayerConnected.
Добавлено (03.05.2011, 00:08) --------------------------------------------- Господа, кому не в лом, сделайте замеры с:
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
AirKite ты логически неверно подсчитал задачи с foreach, потому что для игроков уже существует спец-аргумент Player, который при 0 онлайне вообще не должен что-либо запускать, в этом его суть, что он инициализирует только те элементы, которые есть на сервере, будь это дома, игроки, тачки и прочее. Результаты: [02:58:37] MAX_PLAYERS - 136 [02:58:38] GetMaxPlayers() - 1402 [02:58:38] MaxPlayers - 137 [02:58:38] foreach - 1 http://best.of.by/paste/d719391ea Ну там ещё + сама инициализация foreach. Кстати на оф.форуме уже ломали мозги по-поводу этого, и снова из мухи слона раздули, все равно это уже давным давно доказано, что с foreach при среднем онлайне будет ТАК ИЛИ ИНАЧЕ в ВЫИГРЫШЕ относительно обычных циклов. К примеру мы не только можем его использовать для игроков, но для любых ваших систем в моде, если вы создаете динамическую инфраструктуру, то без него просто не обойтись, дабы избежать лишних итераций.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Вторник, 03.05.2011, 01:13
Ну у тебя выходит подсчёты на 40к циклов. Ибо там 10000 раз цикл прокручивается что бы получить 920ms. Итого 920/10000=0,092ms 0,092*246=22,632ms в минуту. А что есть минута? Минута = 60000ms. Это выходит 0,03772% задержки за минуту. С учётом существующей задержки потока, без какой либо нагрузки (нагрузки самого сервера, просчётов синхронизации и т.д.) это настолько ничтожно, что об этом говорить смешно. Равносильно использовать ++i вместо i++.
Quote (Eakwarp)
А, и да, во всех подсчетах до меня, из которых я исходил, при MAX_PLAYERS и подобных не учитывались проверки на IsPlayerConnected.
Я делал с IsPlayerConnected. Есть замеры, есть код
Quote (Eakwarp)
Господа, кому не в лом, сделайте замеры с:
Quote (Eakwarp)
foreach(Player,i) { } Посмотрим наглядно.
В таком случае сервер должен быть полным.
Quote (toneysix)
AirKite ты логически неверно подсчитал задачи с foreach, потому что для игроков уже существует спец-аргумент Player, который при 0 онлайне
Мы оптимизируем код для сервера с онлайном 0? Изначально мне казалось в оптимизации требуются как раз таки онлайновые сервера. Сервера с онлайном до 50 спокойно вывозят самый грамозкий быдлокод. Насчёт Player я вкурсе... и он работет аналогично Iter_Add(Player, playerid); в OnPlayerConnect. Т.е.
Code
for(new t; t < 500; t++) Iter_Add(MyIterator, t);
Просто создаёт те же самые условия что и foreach(Player, i) при полном сервере.
AirKite давайте смотреть на вещи субъективно, во-первых, в моде не один цикл, связанный с прогоном всех элементов, к примеру даже взять поиск игрока, который стоит рядом, целесообразно вообще заносить игроков, которые вошли в область твоей видимости в новую итерацию, точно также с тачками, вместо прогона всех двух тысяч тачек, прогоняем только те, которые вошли в область видимости игрока, и это только поверхностно, скорее здесь индивидуальный выбор каждого, лично я далек от всех этих способов, по той простой причине, что я использую динамическую структуру, которая основывается на удаление и создания нового элемента массива через плагин, но советую все-таки использовать foreach, и не только для стандартных функций, прогона игроков, но и создание своих данных, например существующих тачек, домов и так далее, то есть там, где требуется динамичность и быстрота выполнения, а эти подсчеты никак не могут быть субъективны в тех или иных ситуациях, потому что кол-во игроков, загруженность, количество циклов в моде все это только добавляет нагрузку и в конечном счете дает выигрыш от подобного использования циклов суммируя результат.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
AirKite у меня весь мод написан в виде плагина, там на самом деле ничего сложного нет, обычная работа с динамическими данными, new/delete, могу-лишь сделать урок, как создавать мод на си/с++ языке в виде плагина или сделать пре-релиз конкретного хранения динамических данных, ах да, тут уже вован три двойки реализовывал подобное только для использования в павн - http://www.samp-rus.com/forum/62-10041-1 Но мне не нравится сама реализация, то есть слишком много функций, когда можно заменить чем-то полегче, как делает всегда Y_LESS.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Решил оптимизировать свой сенсгейм всё прошло отлично кроме изменения max_player до 60.Почему то когда лидер заходит то у него меняеться респ на стандартный и он не лидер.
Решил оптимизировать свой сенсгейм всё прошло отлично кроме изменения max_player до 60.Почему то когда лидер заходит то у него меняеться респ на стандартный и он не лидер.
прочитайте пожалуйста всю тему, а не только первый пост!
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Напишу как-нибудь на досуге, пока работы выше крыше, ещё надо будет для плагина приготовить проект в визуалке, готовый вариант, от которого уже начнем основу.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Среда, 04.05.2011, 17:23
new TextAdv[3000]; такие большие массивы никак на работе сервера не скажутся?..
Quote (oleg_tarantula)
Goshik, больше нагрузка, так как больше памяти выделиться под этот массив...
Все верно,скажется так как выделяется больше памяти. Но смотря что ты имеешь ввиду под нагрузкой,есть нагрузка на память,а есть на процессор,в данном случае на память.
Прощай самп-рус =Р
Сообщение отредактировал Impereal - Воскресенье, 08.05.2011, 21:55