Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Jake_Bat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±

    Оптимизация сервера (Для опытных)

    Здравствуйте, господа :)
    Вопрос для опытных программистов:
    Расскажите все возможные, максимально полезные методы оптимизации
    Приветствуются даже что-то связанное с углубленной оптимизацией, если есть возможность через ассемблерские функции и подобное.
    Или например побитовый сдвиг и тому подобное.
    Расскажите что максимально может губить сервер.
    То, что не написано в обычных пабликовских оптимизациях.
    А если и написано, дополните вашими словами.

  2. #2
    Аватар для x86
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.01.2019
    Сообщений
    41
    Репутация:
    6 ±
    Самое губительное для сервера - Pawn, который никак не оптимизирован. Тем не менее его можно сделать быстрым без всяких инструкций и прочей фигни с помощью JIT компилятора.

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от x86 Посмотреть сообщение
    Самое губительное для сервера - Pawn
    Глупости. Для SA-MP сервера Pawn вполне достаточно и без всяких Jit-компиляторов или чего-то ещё. Люди ещё со времён 0.3а держали на хостингах сервера с десятками тысяч строк кода и не испытывали серьёзных проблем. Достаточно просто понимать что ты пишешь и не писать совсем уж кривой код.
    А проблемы с оптимизацией Pawn испытывают только дрочащие на результаты профайлера и синтетических тестов. К реальности же такие тесты часто никак не относятся и чаще всего такие люди даже сервер свой не держат/не держали. Как говорится: "Плохому программисту язык программирования мешает".

    В общем, на деле, как я уже сказал, достаточно не писать совсем уж кривой код и в целом понимать что/для чего ты пишешь. А каких-то методик по оптимизации не существует особо, ибо, как я уже сказал, в основном все проблемы от кривой реализации тех или иных систем, а не от проблем Pawn/SA-MP или чего-то ещё.
    В любом случае, пока ты не запустишь сервер и не нагонишь туда игроков, какой-то реальной информации о слабых местах в своих скриптах ты не получишь. А до этого момента не советую тратить время на оптимизацию: стараться сразу писать нормальный код - да, нужно, но не нужно сидеть уже над написанным кодом несколько дней, с целью получения прироста в 0.1мс. Чаще всего такая преждевременная оптимизация на деле пользы не приносит. Наоборот, в определённых случаях она даже вредит. Как минимум, тем, что вместо реализации каких-то полезных систем (реализация которых может привнести гораздо более проблемный код для сервера) ты топчешься на месте и пытаешься исправить проблему, которой ещё нет.

    В общем, на этапе разработки занимайся именно разработкой. А уже после, если будут заметны проблемы, подключай профайлер, собирай статистику по работе мода и увидишь где у тебя действительно слабое место в скрипте. Таким образом ты своё время гораздо более продуктивнее потратишь, нежели если будешь изначально над каждыми 10-ю строками кода сидеть по несколько часов, думая над тем, как из них выжать дополнительную тысячную миллисекунды.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. Пользователь сказал cпасибо:
    L0ndl3m (13.04.2019)
  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от x86 Посмотреть сообщение
    Самое губительное для сервера - Pawn, который никак не оптимизирован.
    Pawn очень даже хорошо оптимизирован на уровне архитектуры ВМ: есть альтернативная версия ядра интерпретатора, написанная на ассемблере и даже своя реализация JIT - правда, ни одна из них не используется в сервере SA-MP (по давно известной причине).

    Цитата Сообщение от x86 Посмотреть сообщение
    Тем не менее его можно сделать быстрым без всяких инструкций и прочей фигни с помощью JIT компилятора.
    Вот только в плане отладки и обнаружения ошибок этот JIT (речь именно о плагине, не о стандартной реализации) - чёрный ящик.
    За примером далеко ходить не нужно, достаточно просто попытаться разделить на ноль:
    1. {
    2. return 1 / GetPlayerVehicleID(INVALID_PLAYER_ID);
    3. }

    Стандартный интерпретатор деления на ноль не допустит, подняв состояние ошибки (а с CrashDetect ещё и выведет файл и номер строки, где ошибка произошла).
    С JIT случится падение сервера. Из-за элементарного деления на ноль (а ведь есть и другие виды ошибок, вызывающие краш под JIT!) И на реальном сервере поиск таких ошибок может оказаться сущим адом, особенно если для их воспроизведения требуется участие нескольких игроков.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #5
    Аватар для Jake_Bat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±
    А что больше всего может нагружать сервер?
    Как профилированием проверить stock's например?
    Как правило самый ресурсоемкий паблик считается секундный таймер.
    Тогда мы всегда считай будем видеть, что таймер больше всего нагружает?

  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Jake_Bat Посмотреть сообщение
    А что больше всего может нагружать сервер?
    Кривой код.

    Цитата Сообщение от Jake_Bat Посмотреть сообщение
    Как профилированием проверить stock's например?
    Просто подключаешь профайлер, загоняешь игроков, ждёшь день-другой (а лучше собрать статистику несколько раз за несколько дней) и смотришь какие функции будут самые прожорливые. А далее уже смотришь, можно ли как-то оптимизировать код внутри функций. Вполне возможно, что функции и так потребляют оптимальное количество ресурсов, хоть и будут самыми прожорливыми.

    Собственно, делать это стоит только когда есть реальные проблемы. Если и без того всё работает хорошо, то лучше пусть оно так и продолжает работать, а ты лучше займись разработкой новых систем)

    Цитата Сообщение от Jake_Bat Посмотреть сообщение
    Как правило самый ресурсоемкий паблик считается секундный таймер.
    Тогда мы всегда считай будем видеть, что таймер больше всего нагружает?
    Таймеры наоборот должны быть максимально оптимизированы. Как и любой код, который вызывается очень часто. Как правило, многие вещи, которые пихают в секундный таймер, можно реализовать более адекватными способами.
    Но вообще - нет, далеко не обязательно секундный таймер будет самым ресурсоёмким.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •