20:53
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: Dima-kun  
Оптимизация кода
EakwarpДата: Вторник, 03.05.2011, 00:08 | Сообщение # 31
Мастер джэдай
Группа: Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус:
Quote (AirKite)
Просто выходи так, что боремся за эти 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)
---------------------------------------------
Господа, кому не в лом, сделайте замеры с:

for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
}

for(new i=0; i<GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
}

new MaxPlayers;
public OnGameModeInit()
{
MaxPlayers=GetMaxPlayers();
}

for(new i=0; i<MaxPlayers; i++)
{
if(IsPlayerConnected(i))
}

foreach(Player,i)
{
}

Посмотрим наглядно.


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.


Valakas Roleplay on Twitter

Платные консультации, разработка, в ICQ. Дорого.
toneysixДата: Вторник, 03.05.2011, 00:53 | Сообщение # 32
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
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
AirKiteДата: Вторник, 03.05.2011, 02:11 | Сообщение # 33
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (Eakwarp)
920*246=226320мс в минуту на выполнение циклов.

Ну у тебя выходит подсчёты на 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? :D Изначально мне казалось в оптимизации требуются как раз таки онлайновые сервера.
Сервера с онлайном до 50 спокойно вывозят самый грамозкий быдлокод.
Насчёт Player я вкурсе... и он работет аналогично Iter_Add(Player, playerid); в OnPlayerConnect. Т.е.
Code

for(new t; t < 500; t++)  
      Iter_Add(MyIterator, t);

Просто создаёт те же самые условия что и foreach(Player, i) при полном сервере.



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
toneysixДата: Вторник, 03.05.2011, 04:34 | Сообщение # 34
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
AirKite давайте смотреть на вещи субъективно, во-первых, в моде не один цикл, связанный с прогоном всех элементов, к примеру даже взять поиск игрока, который стоит рядом, целесообразно вообще заносить игроков, которые вошли в область твоей видимости в новую итерацию, точно также с тачками, вместо прогона всех двух тысяч тачек, прогоняем только те, которые вошли в область видимости игрока, и это только поверхностно, скорее здесь индивидуальный выбор каждого, лично я далек от всех этих способов, по той простой причине, что я использую динамическую структуру, которая основывается на удаление и создания нового элемента массива через плагин, но советую все-таки использовать foreach, и не только для стандартных функций, прогона игроков, но и создание своих данных, например существующих тачек, домов и так далее, то есть там, где требуется динамичность и быстрота выполнения, а эти подсчеты никак не могут быть субъективны в тех или иных ситуациях, потому что кол-во игроков, загруженность, количество циклов в моде все это только добавляет нагрузку и в конечном счете дает выигрыш от подобного использования циклов суммируя результат.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
AirKiteДата: Вторник, 03.05.2011, 22:16 | Сообщение # 35
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
toneysix, ну с тем что ты сказал, по большой степени я согласен.
Quote (toneysix)
я использую динамическую структуру, которая основывается на удаление и создания нового элемента массива через плагин

Можно линк на плагин или это личный?



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
toneysixДата: Среда, 04.05.2011, 06:51 | Сообщение # 36
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
AirKite у меня весь мод написан в виде плагина, там на самом деле ничего сложного нет, обычная работа с динамическими данными, new/delete, могу-лишь сделать урок, как создавать мод на си/с++ языке в виде плагина или сделать пре-релиз конкретного хранения динамических данных, ах да, тут уже вован три двойки реализовывал подобное только для использования в павн - http://www.samp-rus.com/forum/62-10041-1
Но мне не нравится сама реализация, то есть слишком много функций, когда можно заменить чем-то полегче, как делает всегда Y_LESS.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
kamilot73Дата: Среда, 04.05.2011, 07:03 | Сообщение # 37
Новенький
Группа: Пользователи
Сообщений: 14
Награды: 0
Город: Ekm
Репутация: -2
Замечания: 0%
Статус:
Решил оптимизировать свой сенсгейм всё прошло отлично кроме изменения max_player до 60.Почему то когда лидер заходит то у него меняеться респ на стандартный и он не лидер.
EakwarpДата: Среда, 04.05.2011, 10:33 | Сообщение # 38
Мастер джэдай
Группа: Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус:
Quote (kamilot73)
Решил оптимизировать свой сенсгейм всё прошло отлично кроме изменения 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.


Valakas Roleplay on Twitter

Платные консультации, разработка, в ICQ. Дорого.
AirKiteДата: Среда, 04.05.2011, 12:40 | Сообщение # 39
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
toneysix, ну да, я смотрел плагин. Только его нет под Linux, или это не проблема скомпилить?

Quote (toneysix)
могу-лишь сделать урок, как создавать мод на си/с++

Я бы посмотрел. Да и другие наверное тоже с любопытством на это посмотрели.



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Среда, 04.05.2011, 12:41
ImperealДата: Среда, 04.05.2011, 15:06 | Сообщение # 40
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
Quote (AirKite)
могу-лишь сделать урок, как создавать мод на си/с++

Да,действительно,интересно было бы взглянуть :)



Прощай самп-рус =Р
toneysixДата: Среда, 04.05.2011, 17:22 | Сообщение # 41
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Напишу как-нибудь на досуге, пока работы выше крыше, ещё надо будет для плагина приготовить проект в визуалке, готовый вариант, от которого уже начнем основу.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Среда, 04.05.2011, 17:23
GoshikДата: Воскресенье, 08.05.2011, 20:33 | Сообщение # 42
Уверенный в себе
Группа: Пользователи
Сообщений: 280
Награды: 1
Город: ---
Репутация: 18
Замечания: 60%
Статус:
new TextAdv[3000];
такие большие массивы никак на работе сервера не скажутся?..

oleg_tarantulaДата: Воскресенье, 08.05.2011, 21:15 | Сообщение # 43
Постоялец
Группа: Продвинутые
Сообщений: 345
Награды: 5
Город: -
Репутация: 118
Замечания: 60%
Статус:
Goshik, больше нагрузка, так как больше памяти выделиться под этот массив...


ImperealДата: Воскресенье, 08.05.2011, 21:27 | Сообщение # 44
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
Quote (Goshik)
new TextAdv[3000]; такие большие массивы никак на работе сервера не скажутся?..

Quote (oleg_tarantula)
Goshik, больше нагрузка, так как больше памяти выделиться под этот массив...

Все верно,скажется так как выделяется больше памяти.
Но смотря что ты имеешь ввиду под нагрузкой,есть нагрузка на память,а есть на процессор,в данном случае на память.



Прощай самп-рус =Р

Сообщение отредактировал Impereal - Воскресенье, 08.05.2011, 21:55
AirKiteДата: Вторник, 24.05.2011, 02:33 | Сообщение # 45
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Вот кстати INC ForEachPlayer по проще будет http://pastebin.com/K1WUNCU6


[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
  • Страница 3 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua