Size: a a a

2020 June 02

l

lem0nify in learn.java
Пишу бота для Discord с текстовыми играми, типа загадок, угадайки персонажа по силуэту и т.д.
Некоторые игры должны заканчиваться по таймеру, например, если никто из пользователей не угадал за отведённое время.
Разумно ли к каждому объекту такой игры привязывать отдельный поток, считающий время и завершающий игру по его истечению? 🤔
источник

СШ

Слышал Шорохи... in learn.java
если не популярный бот то нормально, а если хайлоад,  ресурсов придется запасти)
источник

QH

Quantum Harmonizer in learn.java
lem0nify
Пишу бота для Discord с текстовыми играми, типа загадок, угадайки персонажа по силуэту и т.д.
Некоторые игры должны заканчиваться по таймеру, например, если никто из пользователей не угадал за отведённое время.
Разумно ли к каждому объекту такой игры привязывать отдельный поток, считающий время и завершающий игру по его истечению? 🤔
Нет, потоками вообще не нужно оперировать руками.
Timer, ScheduledExecutorService
источник

QH

Quantum Harmonizer in learn.java
Потоки привязываются либо к количеству ядер, либо к количеству одновременных IO-задач.
источник

l

lem0nify in learn.java
Непопулярный, но внутренний перфекционист всё равно настаивает, чтобы сделать по красоте.
источник

l

lem0nify in learn.java
Quantum Harmonizer
Нет, потоками вообще не нужно оперировать руками.
Timer, ScheduledExecutorService
А таймер разве не на тех же потоках работает?
источник

QH

Quantum Harmonizer in learn.java
lem0nify
А таймер разве не на тех же потоках работает?
О ужас, я посмотрел исходники. Спасибо, больше никогда никому не советую таймер.
источник

l

lem0nify in learn.java
Всё-таки на потоках? :D
источник

QH

Quantum Harmonizer in learn.java
lem0nify
Всё-таки на потоках? :D
ScheduledExecutorService
источник

СШ

Слышал Шорохи... in learn.java
lem0nify
Всё-таки на потоках? :D
нет. суть в том чтобы через равные промежутки что то выполнять. а не параллельно у каждого экземпляра свое вести что то
источник

QH

Quantum Harmonizer in learn.java
lem0nify
Всё-таки на потоках? :D
а таймер — да, 1 таймер — один поток, не ожидал такого от Джошуа
источник

l

lem0nify in learn.java
Зря. Насколько я понимаю, Джава только вот с 7-8 версии начала семимильными шагами шагать в сторону каких-то современных решений касательно многопоточности, а раньше никакой альтернативы старым добрым тредам из коробки и не было.
источник

QH

Quantum Harmonizer in learn.java
lem0nify
Зря. Насколько я понимаю, Джава только вот с 7-8 версии начала семимильными шагами шагать в сторону каких-то современных решений касательно многопоточности, а раньше никакой альтернативы старым добрым тредам из коробки и не было.
ThreadPoolExecutor, Future и atomic.* существуют с пятой
источник

QH

Quantum Harmonizer in learn.java
CompletableFuture + ForkJoinPool + Stream — очень круто, но без них тоже всё возможно
источник

l

lem0nify in learn.java
Кстати, вопрос (не)много оффтопный, надеюсь не покарают, но раз уж речь зашла, задам.
Если бы я писал этого бота на котлине, было бы адекватным решением для этого использовать его корутины? Точно так же по одной на каждый инстанс игры.
источник

QH

Quantum Harmonizer in learn.java
lem0nify
Кстати, вопрос (не)много оффтопный, надеюсь не покарают, но раз уж речь зашла, задам.
Если бы я писал этого бота на котлине, было бы адекватным решением для этого использовать его корутины? Точно так же по одной на каждый инстанс игры.
Да.
источник

l

lem0nify in learn.java
Эх, надо было писать на котлине.
источник

QH

Quantum Harmonizer in learn.java
Если состояние не нужно сериализовать/хранить, корутины очень выручают со всякими вебсокетами и прочими стейтфул штуками
источник

l

lem0nify in learn.java
А CompletableFuture работает, как корутины, без блокировки и с сохранением состояния стека?
источник

QH

Quantum Harmonizer in learn.java
lem0nify
А CompletableFuture работает, как корутины, без блокировки и с сохранением состояния стека?
они больше на реактор похожи. Там нет никакой подкапотной магии и трансформаций байт-кода, хочешь — неблокирующе подписался, хочешь — заблокировался
источник