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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 18 сен 2016.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Dereku Старожил

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    ну а почемубы не сделать задержку 20 тиков? Ведь всёравно измеряем в целых числах, а не в 2.5 секунд и тд.
     
Статус темы:
Закрыта.

Поделиться этой страницей