Вопрос

Могу ли я установить максимальный размер почтового ящика актера в Scala?

Возьмите проблему Производитель-Потребитель. С потоками я могу заблокировать производителей, когда буфер заполнится. Я видел пару примеров «производитель-потребитель», написанных на Scala, и все они используют актеров с почтовыми ящиками, используемыми в качестве «буфера». Могу ли я установить размер почтового ящика, чтобы производители ожидали, пока потребитель не будет готов? Любое другое элегантное решение, чтобы избежать неконтролируемого роста почтовых ящиков?

Это было полезно?

Решение

Вы можете создать актера, который действует как буфер между производителем и потребителем. Буфер проверяет свой почтовый ящик на свои данные цикла. Он отправляет обратно «перегрузку» сообщение производителю, когда количество буферизованных продуктов слишком велико; и отправляет сообщение «очистить» сообщение, как только все вернулось в порядок. В случае слишком большого количества сообщений он просто отбрасывает входящие (или самые старые).

Потребитель активно запрашивает товары из буфера, который, в свою очередь, отправляет обратно один товар. Если буфер пуст, потребитель продолжает ждать ввода.

Производитель отправляет продукты в буфер субъекта. Если он получает «перегрузку» сообщение может остановить производство или продолжить производство, зная тот факт, что продукты могут упасть.

Конечно, эта логика может быть напрямую реализована в самом производителе или потребителе, но отдельный буфер позволит вам более легко представить нескольких производителей и / или потребителей.

Другие советы

Метод Actor.mailboxSize возвращает количество ожидающих сообщений в почтовом ящике актера.

Это можно использовать для регулирования производительности различными способами.

Например, одна возможность может быть,

Производитель проверяет, больше ли mailboxSize потребителя, чем некоторое пороговое значение. Если это так, то он отправляет SpecialMessage потребителю и блокирует семафор. Когда потребитель получает этот SpecialMessage , он освобождает семафор. Теперь продюсер может весело продолжать свой бизнес.

Это позволяет избежать опроса, а также любых пропущенных сообщений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top