Как защититься от наводнения
Я сделал своего IRC бота и столкнулся с проблемой затопления. Я пытаюсь найти способ распределить сообщения таким образом, чтобы, если все 10 человек выполняли команду одновременно, это не приводило к чрезмерному затоплению бота. Как бы я это сделал? Я думал о реализации очереди, но я не уверен, куда идти после этого.
Я не использую никаких фреймворков для этого бота, и при этом я не хочу переключаться на какие-либо фреймворки (если это не очень просто).
2 ответа
Конечно, вы можете использовать очередь.
Пусть один поток помещает вещи в очередь, а другой поток обрабатывает элементы из очереди в хорошем темпе. Это образец классической модели потребитель / производитель.
Просто убедитесь, что вы не позволите своей очереди съесть всю вашу память в случае чрезмерного затопления. (Вы можете, например, просто отбросить сообщения, если очередь заполнена.)
java.util.concurrent, вероятно, имеет то, что вы хотите. Исполнитель или просто BlockingQueue, например.