Изменение емкости Akka Streams `groupBy` при завершении подпотока?

При использовании groupBy в определении потока потока с некоторой максимальной пропускной способностью n:

source.groupBy(Int.MaxValue, _.key).to(Sink.actorRef)

Если я подключу подпотоки, которые в результате скажем, приемник актора, и целенаправленно заставлю подпотоки завершаться на каком-то сообщении, освободит ли это емкость groupBy? Будет ли он переместиться с n на n-1 обратно на n, если подпоток закончится приемником? Это жизнеспособный способ настроить динамический график?


person simonl    schedule 01.05.2017    source источник


Ответы (1)


Относительно того, как groupBy работает в целом: да, пропускная способность maxSubstreams является динамической, то есть представляет максимальное количество активных подпотоков.

Этап GroupBy сохраняет ссылку на каждый подпоток в его внутреннем состоянии, и он удаляется всякий раз, когда этот конкретный подпоток завершается.

Что касается вашего конкретного примера, я не думаю, что есть способ убедиться, что «подпоток заканчивается приемником». Это связано с тем, что при использовании to(Sink.actorRef) после groupBy все потоки будут кормить одного-единственного актера.

person Stefano Bonetti    schedule 02.05.2017
comment
Спасибо за пояснение! Тогда есть ли рекомендуемый способ корректно закрыть подпоток? - person simonl; 02.05.2017
comment
Наткнулся на этот вопрос - stackoverflow.com/questions/38325210/; похоже, я смогу достичь того, чего хочу, используя takeWhile / statefulMapconcat - person simonl; 02.05.2017