Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Аналог шедулеров.. Много шедулеров

Discussion in 'Разработка плагинов для новичков' started by Lisenochek, Sep 18, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. У меня есть плагин, в котором нужно реализовать некоторые циклические действия (отбирание здоровья и т.д), но проблема в том, что несколько таких шедулеров кушают много ресурсов сервера. Есть ли идеи, как можно было бы эти шедулеры оптимизировать или есть аналоги.

    Я знаю, что есть тред (Thread), но если выполнять действия в асинхронном потоке, то будет выдавать предупреждения в консоли. Решается конечно же еще одним шедулером внутри, в котором и вписывается все эти действия, но это равноценно обычному шедулеру.
     
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Достаточно одного шедулера. Почти во всём.
     
  4. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Просвети, как мне выполнять все циклические действия с помощью одного шедулера
     
  5. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А зачем мне давать тебе рыбку, когда есть удочки?
     
  6. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Просто я тоже об этом задумывался, но как реализовывать... *пожал плечами*
     
  7. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Окей, рыбка: Есть у нас лист с задачами. Каждая задача имеет тип и собственный "таймер". А этот самый таймер тикает наш шедулер. И если у нас на таймере нулики - выполняем задачу и сообщаем о том, что задачу выполнили, можно с ней что то делать.
    Это как один из быстрореализуемых вариантов. Конечно, не без урона производительности (правда, он будет заметен когда у нас более 10к задач), но всё же.
     
  8. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Буду пробовать...[DOUBLEPOST=1474188575,1474183683][/DOUBLEPOST]
    Понял только одно. Регаем шедулер, там вызываем нашу задачу, а как установить тики на задачу - не знаю.
     
  9. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Учиться думать, и попробовать решить самому, в первую очередь. Один раз сам решишь - на годы запомнишь.
    Если таки сложно, и самому ну никак не удалось, примерно распишу тебе вариант. Он внизу, белым по белому.
    Создаешь некий абстра...ктный класс с двумя инт-полями и методами аля update() и execute() первое поле - откат, второе - текущий таймер
    Апдейт следит за таймером и коль что вызывает execute, сам экзекьют ты переопределяешь в наследниках.
    Можешь туда передавать еще что-то, или вообще как душе угодно.
     
  10. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Trophy Points:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Моя твоЯ НЕ понимать!!1
     
  11. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Ни разу не встречался с задачами, когда нужно использовать/регистрировать свой шедулер.
    Мне всегда хватало одного, стандартного, который доступен по getServer().getScheduler().
    Он уже есть и уже умеет всё, что как мне кажется нужно остальным (не считая мега-проектов) — выполнять посланный в него код сразу, с задержкой, или регулярно с заданным промежутком.
    Также никогда не использовал BukkitRunnable, имхо, какая-то излишняя прослойка =)

    Может быть я что-то делаю не так?
     
  12. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Так он сейчас даже deprecated помечен.
    А раньше вроде только от него шедулеры наследовать можно было.

    Одна из немногих причин почему может понадобиться использовать Thread - задержка менее одного тика. Но на деле весьма странное занятие, да
    Хотя я как-то шаманил так
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Мне кажется, если задержка меньше 1 тика, она вообще не нужна. syncronized или другие способы выручат не поломать данные.
    Ну а параллельные потоки полезны для наоборот, ресурсо-ёмких операций, например общение с СУБД, запись/чтение тяжёлых файлов или просто громоздкие вычисления.
     
  14. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Я это и имел ввиду)

    Уже пару лет как обращаюсь к бд в асинхронных шедулерах по 1 на запрос, и отлично себя чувствую.
    Конечно можно реализовать многопоточную очередь и работника который будет в ней копаться... Но тут все
    зависит от того как часто производится запись в бд. В большинстве случаев я не считаю это необходимым.

    В целом да, я просто повторил твое сообщение :oops:
     
  15. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Мне кажется, что synchronized способен только вызвать зависание потока, если tps сервера меньше 18.
     
  16. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Я обычно просто использую Concurrent коллекции для подобных целей.
    Так же еще есть такая замечательная штука
     
  17. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Главное, чтобы другие не делали в своём блоки syncronized кучу работы =) а для простого обмена информацией более чем годится.
    Но нельзя и не согласиться с
    там миллионы всего на все случаи жизни.
     
  18. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    То ли я немного глупенький, то ли ql_nik_lp плохо объяснил. Можно мне подробнее расписать весь принцип? А с кодом я попробую что-то сделать.
     
  19. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Discord: M3lon#1817
    Расскажу голосом
     
  20. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Ну... Вроде бы я тебе отправил инвайт.
     
  21. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    ну а почемубы не сделать задержку 20 тиков? Ведь всёравно измеряем в целых числах, а не в 2.5 секунд и тд.
     
Thread Status:
Not open for further replies.

Share This Page