Я прихожу из Java, где я отправлял Runnable
в ExecutorService
, поддерживаемый пулом потоков. В Java очень ясно, как установить ограничения на размер пула потоков.
Мне интересно использовать актеров Scala, но я не понимаю, как ограничить concurrency.
Скажем, гипотетически, что я создаю веб-сервис, который принимает "задания". Задание отправляется с запросами POST
, и я хочу, чтобы моя служба запустила задание, а затем немедленно вернула 202 Accepted
- то есть задания обрабатываются асинхронно.
Если я использую участников для обработки заданий в очереди, как я могу ограничить количество обрабатываемых одновременных заданий?
Я могу придумать несколько разных способов приблизиться к этому; Мне интересно, есть ли лучшая практика сообщества или, по крайней мере, некоторые четко установленные подходы, которые являются несколько стандартными в мире Scala.
Один из подходов, о котором я думал, состоит в том, что у него есть один координатор-актер, который будет управлять очередью заданий и участниками обработки работы; Я полагаю, что он мог бы использовать простое поле int для отслеживания того, сколько заданий обрабатывается в настоящее время. Я уверен, что в этом случае есть некоторые проблемы с этим подходом, например, чтобы отслеживать, когда возникает ошибка, чтобы уменьшить число. Вот почему мне интересно, если Scala уже предоставляет более простой или более инкапсулированный подход к этому.
BTW Я пытался задать этот вопрос некоторое время назад, но я спросил его плохо.
Спасибо!