Почему поток Akka имеет ровно один источник и один приемник?

В документах Akka Streams четко указано, что для запуска потока он должен иметь ровно один источник и ровно один приемник. Интересно, что накладывает такое ограничение. Сценарии с несколькими источниками, объединенными в один, с несколькими приемниками, разветвленными из одного потока, вполне разумны. Есть ли технические причины для такого ограничения?


person Vagif Abilov    schedule 20.03.2017    source источник
comment
Одна из причин, которая приходит мне на ум, — невозможность реализовать обратное давление в таком сценарии.   -  person expert    schedule 20.03.2017


Ответы (1)


Я предполагаю, что вы ссылаетесь на этот раздел документации, определяющий основные компоненты Akka Streams:

Источник: стадия обработки с ровно одним выходом, [...]

Sink: стадия обработки только с одним входом, [...]

Поток: этап обработки, который имеет ровно один вход и выход, [...]

RunnableGraph: поток, оба конца которого присоединены к источнику и приемнику соответственно, и который готов к run().

Теперь, в то время как первые 3 определения ясны и правдивы, я думаю, что определение RunnableGraph является неполным. RunnableGraph можно определить, как описано (т.е. source.via(flow).to(sink)), и это самый простой способ получить один из них. Однако существуют более гибкие и сложные способы определения RunnableGraph, например GraphDSL.

Если вы посмотрите примеры в это вы увидите RunnableGraph, созданные из нескольких источников и/или нескольких приемников.

Вероятно, правильнее будет сказать, что RunnableGraph — это стадия обработки без входов и выходов (т. е. имеет ClosedShape).

person Stefano Bonetti    schedule 20.03.2017
comment
Спасибо за объяснение. Да, я имел в виду эти определения, и определение RunnableGraph как графа, соединяющего один источник с одним приемником через потоки, привело меня в замешательство. Теперь ясно. - person Vagif Abilov; 21.03.2017