Как работает дроссельная заслонка akka stream?

def throttle(elements: Int, per: FiniteDuration, maximumBurst: Int, mode: ThrottleMode): Repr[Out]

Означает ли maximumBurst количество элементов, которые могут быть обработаны одновременно?


person Max    schedule 28.06.2017    source источник


Ответы (1)


Из scaladoc:

Throttle реализует модель ведра маркеров. Существует сегмент с заданной вместимостью токена (размером пакета или maxBurst). Токены попадают в ведро с заданной скоростью, и их можно «зарезервировать» для последующего использования до емкости ведра, чтобы обеспечить некоторую взрывную нагрузку. Всякий раз, когда поток хочет отправить элемент, он берет столько токенов из корзины, сколько элементов. Если их нет, дроссель ждет, пока ведро не соберет достаточное количество токенов. Ведро заполнено, когда поток только что материализовался и начался.

maximumBurst — это размер корзины токенов в модели, описанной выше. Скажем, мы запускаем дросселированный поток, и приемник начинает требовать элементы. Ступень дроссельной заслонки выдаст maximumBurst из них перед обратным давлением (в режиме формирования) или отказом (в режиме принуждения).

Поэтому я бы сказал, что это максимальное количество элементов, которые можно обработать без дросселирования. Обрабатывается «одновременно» никогда не будет точным определением в потоке :)

person Stefano Bonetti    schedule 28.06.2017