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

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±

    Как работают плагины (в каком потоке и т.п.)?

    Приветствую. Такой вопрос, все плагины работают в отдельном потоке? Вот к примеру создание пикапов:
    PHP код:
    CreatePickup(...);
    CreateDynamicPickup(...);
    CreatePickup(...); 
    В данном случае 3-ий пикап не создастся пока система не создаст 2-ой или они (2 и 3) создадутся одновременно? Или же к примеру обновление координат, стример проверяет где находится игрок и если он вошёл в одну из зон (к примеру) то срабатывает паблик OnPlayerEnterDynamicArea. Так вот время затраченное стримером на эту самую проверку и вызов паблика учитывается при выполнении кода игрового мода? То есть пока стример не закончит все свои проверки то все остальные операции будут ждать своей очереди? Или же стример как-то работает в отдельном потоке? Прошу не бросаться помидорами а объяснить что к чему. Заранее благодарен.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
     Do not believe me
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Приветствую. Такой вопрос, все плагины работают в отдельном потоке? Вот к примеру создание пикапов:
    PHP код:
    CreatePickup(...);
    CreateDynamicPickup(...);
    CreatePickup(...); 
    В данном случае 3-ий пикап не создастся пока система не создаст 2-ой или они (2 и 3) создадутся одновременно?
    Ну так ты же вызываешь функции со стороны мода. Этот вызов ещё никак не связан с плагином. Он лишь отправляет плагину информацию => происходить всё будет в одном потоке


    Цитата Сообщение от Kazoox Посмотреть сообщение
    Или же к примеру обновление координат, стример проверяет где находится игрок и если он вошёл в одну из зон (к примеру) то срабатывает паблик OnPlayerEnterDynamicArea. Так вот время затраченное стримером на эту самую проверку и вызов паблика учитывается при выполнении кода игрового мода? То есть пока стример не закончит все свои проверки то все остальные операции будут ждать своей очереди? Или же стример как-то работает в отдельном потоке? Прошу не бросаться помидорами а объяснить что к чему. Заранее благодарен.
    Плагины же работают уже в своём потоке (а многие ещё и свою мультипоточность поддерживают, типа MySQL) и как раз пока плагин проверяет координаты, сервер работает по своему плану. Но когда плагин эти координаты находит, тогда он уже отправляет серверу нужную информацию и вызов того же OnPlayerEnterDynamicArea "встаёт" в очередь сервера.

    В общем, всё, что ты прописал в своём скрипте, будет работать в одном потоке, а уже последствия этого вызова могут обрабатываться в отдельном, если эти последствия затрагивают те же самые плагины.

    - - - Добавлено - - -

    Если уж совсем упрощать, то это происходит, в моём понимании, как-то так:






    Верный ответ дал Daniel Cortez ниже :3
    Последний раз редактировалось DeimoS; 27.03.2016 в 14:09.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Kazoox (27.03.2016)
  4. #3
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    FS как я понимаю работают так же как и плагины в своём потоке? Как только на данный вопрос будет дан ответ - тему можно закрывать. Благодарю за помощь.

  5. #4
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    FS как я понимаю работают так же как и плагины в своём потоке? Как только на данный вопрос будет дан ответ - тему можно закрывать. Благодарю за помощь.
    нет

  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Плагины же работают уже в своём потоке (а многие ещё и свою мультипоточность поддерживают, типа MySQL) и как раз пока плагин проверяет координаты, сервер работает по своему плану. Но когда плагин эти координаты находит, тогда он уже отправляет серверу нужную информацию и вызов того же OnPlayerEnterDynamicArea "встаёт" в очередь сервера.
    Плагины работают в том же потоке, что и сервер. В случае с MySQL за запросы в основном и в отдельном потоке отвечают разные функции, т.е. намерение выполнить запрос в отдельном потоке указывается явным образом.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если уж совсем упрощать, то это происходит, в моём понимании, как-то так:




    И снова мимо. Стример не создаёт пикапы самостоятельно, а просто следит за списком из сущностей типа "динамический пикап" и, если игрок находится достаточно близко к координатам такой сущности, стример делает её видимой для игрока, создавая настоящий пикап с помощью CreatePickup. Та же самая логика применима к иконкам на карте и объектам (разве что там используются SetPlayerMapIcon и CreatePlayerObject, благодаря чему лимита объектов для каждого игрока отдельный, т.е. достижение лимита для одного игрока не зависит от других игроков).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Плагины работают в том же потоке, что и сервер. В случае с MySQL за запросы в основном и в отдельном потоке отвечают разные функции, т.е. намерение выполнить запрос в отдельном потоке указывается явным образом.



    И снова мимо. Стример не создаёт пикапы самостоятельно, а просто следит за списком из сущностей типа "динамический пикап" и, если игрок находится достаточно близко к координатам такой сущности, стример делает её видимой для игрока, создавая настоящий пикап с помощью CreatePickup. Та же самая логика применима к иконкам на карте и объектам (разве что там используются SetPlayerMapIcon и CreatePlayerObject, благодаря чему лимита объектов для каждого игрока отдельный, т.е. достижение лимита для одного игрока не зависит от других игроков).
    То есть если в моде у нас имеются (к примеру) 500 проверок координат реализованы с помощью функции IsPlayerInRangeOfPoint, мы их уберём и будем использовать 500 сфер (CreateDynamicSphere) то мы в итоге лишь увеличим производительность нашего кода, но никак не "освободим" систему от всех этих проверок переложив всю работу на стример?

  8. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    То есть если в моде у нас имеются (к примеру) 500 проверок координат реализованы с помощью функции IsPlayerInRangeOfPoint, мы их уберём и будем использовать 500 сфер (CreateDynamicSphere) то мы в итоге лишь увеличим производительность нашего кода, но никак не "освободим" систему от всех этих проверок переложив всю работу на стример?
    Именно. Проверки останутся, просто вы переложите всю работу из своего кода на стример. Естественно, там эти проверки будут создавать меньше нагрузки, ведь нативный код плагина имеет потенциал быть куда более производительным, чем интерпретируемый код.

    P.S.: Я написал именно "имеет потенциал быть более производительным", а не "более производительный" потому что в плагине тоже можно наговнокодить. Командный процессор LIFE:CMD - прекрасный тому пример (его до сих пор можно откопать на г-и): вместо простых операций с массивом из символов все строковые операции производились с помощью класса CString, из-за чего создавались накладные расходы на резервирование блоков памяти из кучи под промежуточные результаты каждый раз, когда нужно было обработать командный текст. Плагин всё ещё работал быстро под вендой, но в Linux интерпретатор Pawn реализован более эффективным образом, из-за чего плагин LIFE:CMD сливал тест ZCMD, написанному на Pawn.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. 2 пользователя(ей) сказали cпасибо:
    DeimoS (27.03.2016) Kazoox (27.03.2016)
  10. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    То есть если в моде у нас имеются (к примеру) 500 проверок координат реализованы с помощью функции IsPlayerInRangeOfPoint, мы их уберём и будем использовать 500 сфер (CreateDynamicSphere) то мы в итоге лишь увеличим производительность нашего кода, но никак не "освободим" систему от всех этих проверок переложив всю работу на стример?
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Именно. Проверки останутся, просто вы переложите всю работу из своего кода на стример. Естественно, там эти проверки будут создавать меньше нагрузки, ведь нативный код плагина имеет потенциал быть куда более производительным, чем интерпретируемый код.
    Более того, стример от инкогнито не проверяет позицию для всех 500 точек сразу, он делит всю карту на ячейки и проверяет только те точки, которые находятся в одной ячейке с игроком. Конечно, это можно реализовать и на Pawn, но, как правило, никто над этим не заморачивается (хотя есть библиотеки: y_areas или W_Points). Так что, используйте возможности этого плагина по полной, в производительности только выиграете.
    Последний раз редактировалось ziggi; 27.03.2016 в 13:55.

  11. Пользователь сказал cпасибо:
    Kazoox (27.03.2016)
  12. #9
    Аватар для DeimoS
    Модератор?

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

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    И снова мимо. Стример не создаёт пикапы самостоятельно, а просто следит за списком из сущностей типа "динамический пикап" и, если игрок находится достаточно близко к координатам такой сущности, стример делает её видимой для игрока, создавая настоящий пикап с помощью CreatePickup. Та же самая логика применима к иконкам на карте и объектам (разве что там используются SetPlayerMapIcon и CreatePlayerObject, благодаря чему лимита объектов для каждого игрока отдельный, т.е. достижение лимита для одного игрока не зависит от других игроков).
    Ну так а я говорил, что именно стример создаёт самостоятельно пикап? Под "CreatePickup" (хотя там должен быть CreateDynamicPickup, но я просто копировал название из шапки и что-то не задумался над ним) я имел ввиду запись данных о пикапе для последующей сверке координат игрока с координатами пикапа... В общем, всё то, о чём ты сказал
    Последний раз редактировалось DeimoS; 27.03.2016 в 14:09.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  13. #10
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Более того, стример от инкогнито не проверяет позицию для всех 500 точек сразу, он делит всю карту на ячейки и проверяет только те точки, которые находятся в одной ячейке с игроком. Конечно, это можно реализовать и на Pawn, но, как правило, никто над этим не заморачивается (хотя есть библиотеки: y_areas или W_Points). Так что, используйте возможности этого плагина по полной, в производительности только выиграете.
    W_Points заинтересовал, но результаты теста старые (6 лет). По тестам в офф.теме получается что стример работает медленнее, но быть может за 6 лет всё изменилось в обратную сторону? Допустим, у нас есть ворота которые должны открываться если к ним приблизился игрок, у какого из вариантов будет выше КПД?
    1) Создаём чекпоинты с помощью стримера (CreateDynamicCP) с одной и с другой стороны ворот соответственно. И когда игрок встал на чекпоинт (OnPlayerEnterCheckPoint):
    PHP код:
    if(IsPlayerInRangeOfPoint(playerid,radius,x,y,z)) MoveObject(...); 
    2) Создаём сферу у ворот. И при вхождении игрока в сферу:
    PHP код:
    if(IsPlayerInRangeOfPoint(playerid,radius,x,y,z)) MoveObject(...); 
    И насколько велика разница? У меня реализован 1 вариант, в случае если 2 вариант не сильно уж и шустрее, то смысла как я понимаю "заморачиваться" мало.
    Протестировал я W_Points, в итоге результаты теста показали что IsPlayerInRangeOfPoint работает в разы быстрее чем GetPlayerPoint.
    Последний раз редактировалось Kazoox; 27.03.2016 в 14:55.

 

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

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

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

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

Ваши права

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