Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: PVar's

  1. #1
    Аватар для Ashmy
    Пользователь

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

    PVar's

    Здравствуйте. Есть смысл удалять все-все PVar'ы при дисконнекте игрока? Знаю что это необязательно, но не освободит ли это удаление память, которую сервер выделил под них ранее?
    P.S да и вообще, какие советы можете дать относительно памяти?

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Смысла удалять их при дисконнекте нет, так как они автоматически удаляются.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Подробнее о принципах работы pVar (именно по части памяти) можно прочесть тут.

    Касаемо последнего вопроса: достаточно лишь просто выделять столько, сколько требуется для работы кода, и этого будет достаточно (подсчитывать нормально размер массивов). Но если ты жаждешь извращений и не самой рациональной траты времени, почитай об упакованных строках, например.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  4. #4
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Хочешь вопрос? :D

    Привет

    Вообщем на PVar я делаю всякую мини п*елку в виде работ и типа готовки еды в моде.
    Возник вопрос например я создал 1 pvar с названием cooking и при определенном первом этапе действия системы ему присваивается значение 1, дальше на втором этапе этому же пвару присваивается значение 2, и на третьем этапе присваивают 3 значения ну типа

    PHP код:
    SetPVar(playerid"cooking"1в начале готовки
    SetPVar
    (playerid"cooking"2когда еда готова
    SetPVar
    (playerid"cooking"3и когда берешь еду 
    Это как то влияет на нагрузку? Или если создал 1 пвар с одним названием и используешь её. Нагрузка приходиться именно на эту выделеную память или как там. Вообщем думаю ты понял суть вопроса

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

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

    Привет

    Вообщем на PVar я делаю всякую мини п*елку в виде работ и типа готовки еды в моде.
    Возник вопрос например я создал 1 pvar с названием cooking и при определенном первом этапе действия системы ему присваивается значение 1, дальше на втором этапе этому же пвару присваивается значение 2, и на третьем этапе присваивают 3 значения ну типа

    PHP код:
    SetPVar(playerid"cooking"1в начале готовки
    SetPVar
    (playerid"cooking"2когда еда готова
    SetPVar
    (playerid"cooking"3и когда берешь еду 
    Это как то влияет на нагрузку? Или если создал 1 пвар с одним названием и используешь её. Нагрузка приходиться именно на эту выделеную память или как там. Вообщем думаю ты понял суть вопроса
    Ты просто меняешь значение конкретного pVar, а не создаёшь новые
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    23.08.2017
    Сообщений
    18
    Репутация:
    0 ±
    Зачем тогда вообще использовать PVar'ы? Если под один PV'ar выделяется 58 байт и при этом сразу же при коннекте игрока? Т.е если мне надо запомнить какое-то значение временно, к примеру из перехода игрока из одного диалога в другой, то какой смысл мне использовать PV'ar, если я могу записать это значение в обычную переменную (я рассматриваю только int и float) и "потратить" всего 4 байта? Получается, что профит мы получим только в случае если сервер будет пустовать? У нас есть 1000 слотов, если мы будем использовать обычную переменную, мы выделим 4000 байт под нужную нам переменную игроков, в случае с PV'ar мы выделим 0, но если на сервер зайдут 100 человек, тогда будет выделено 5800 байт? Не понимаю, разъясните, пожалуйста

  7. #7
    Аватар для Betta
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.08.2017
    Сообщений
    20
    Репутация:
    0 ±
    Цитата Сообщение от NewGreen Посмотреть сообщение
    В давние времена, когда SAMP был еще "маленький", он был рассчитан на 100 игроков, но прошло время, и SAMP вырос, и уже 500 игроков могли играть одновременно, а потом и 1000.
    Еще в SAMP'e была и есть константа MAX_PLAYERS, обозначающая - максимальное количество игроков, сначала она была равна 100, потом 500, и наконец 1000.
    Многие "скриптеры", создавали и создают массивы с использованием MAX_PLAYERS, лишь для хранения одиночных флагов (1, 0 и т.п.), когда MAX_PLAYERS была равна 100, это еще было терпимо, но сейчас, подобное использование массивов слишком затратно в плане потребления памяти.

    Как нам известно, 1 ячейка массива занимает 4 байта, рассчитаем потребление памяти на один массив:

    MAX_PLAYERS при:
    100 * 4 занимало памяти 400 байт;
    500 * 4 занимало памяти 2000 байт;
    1000 * 4 занимает памяти 4000 байт;


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

    В связи с этим, была создана Per-player variable system (сокращенно PVar), система персональных переменых, имеет ряд преимуществ, по сравнению со стандартными переменными:
    • Доступность из всех загруженных модов и фильтр скриптов, позволяет упростить модуляризацию кода.
    • Автоматическое удаление PVar'ов, когда игрок выходит с сервера, что позволяет не сбрасывать вручную переменные для следующего подключившегося игрока.
    • PVar'ы экономят память, не расходуя ее на элементы на не подключенных игроков.
    • Если даже PVar не был создан, при запросе он по-прежнему будет возвращать значение по умолчанию 0.
    • PVar'ы могут хранить очень большие строки используя динамически выделяемую память.


    К недостаткам, возможно, можно отнести скорость работы, но я считаю, что это не очень критично.

    Полное описание PVar можно прочесть тут https://wiki.sa-mp.com/wiki/Per-player_variable_system
    Инфо.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Ashmy Посмотреть сообщение
    Зачем тогда вообще использовать PVar'ы? Если под один PV'ar выделяется 58 байт и при этом сразу же при коннекте игрока? Т.е если мне надо запомнить какое-то значение временно, к примеру из перехода игрока из одного диалога в другой, то какой смысл мне использовать PV'ar, если я могу записать это значение в обычную переменную (я рассматриваю только int и float) и "потратить" всего 4 байта? Получается, что профит мы получим только в случае если сервер будет пустовать? У нас есть 1000 слотов, если мы будем использовать обычную переменную, мы выделим 4000 байт под нужную нам переменную игроков, в случае с PV'ar мы выделим 0, но если на сервер зайдут 100 человек, тогда будет выделено 5800 байт? Не понимаю, разъясните, пожалуйста
    Потому что эти 58*800 байт выделяются в любом случае: используешь ты pVar или нет.
    Ты ещё начни использовать глобальный string вместо локального, ведь зачем выделять память в стэке (хотя она там выделена ещё при старте сервера и все твои "new" просто резервируют определённые участки памяти под свои нужды, а не выделяют новую память), когда можно создать глобальную переменную и делать всё то же самое, что и делает стэк, только в ручном режиме!
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    Ashmy (24.09.2017)
  10. #9
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Потому что эти 58*800 байт выделяются в любом случае: используешь ты pVar или нет.
    Ты ещё начни использовать глобальный string вместо локального, ведь зачем выделять память в стэке (хотя она там выделена ещё при старте сервера и все твои "new" просто резервируют определённые участки памяти под свои нужды, а не выделяют новую память), когда можно создать глобальную переменную и делать всё то же самое, что и делает стэк, только в ручном режиме!

    Я НЕ шарю, но можешь объяснить, как память заранее выделена ещё при старте и ты говоришь резервируются ну типа занимают места в уже существущих ячейках. Как она создается изначально вот это выделенная память. Что его создает при включении мода?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Hecf Посмотреть сообщение
    Я НЕ шарю, но можешь объяснить, как память заранее выделена ещё при старте и ты говоришь резервируются ну типа занимают места в уже существущих ячейках. Как она создается изначально вот это выделенная память. Что его создает при включении мода?
    Если простым языком, то выделение памяти под стэк вшито в саму абстрактную машину. Ты лишь можешь контролировать количество выделяемой памяти через
    PHP код:
    #pragma dynamic количество 
    Собственно, эта память нужна для хранения временных данных (информации о обрабатываемом коллбэке и т.п.), а так же её можно использовать путём создания локальных переменных.

    У меня уже давно есть в планах написать урок, где объяснить подобные элементарные и важные вещи максимально доступно, но пока всё руки не доходят.
    Последний раз редактировалось DeimoS; 24.09.2017 в 03:56.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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