BoundedChannel, BufferBlock или что-то еще?

У меня проблема, когда я выделяю данные, поступающие в систему, поскольку они поступают, они сохраняются на диске, а затем проходят через конвейер, где они преобразуются.

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

Попробовав первоначальную реализацию с BoundedChannels, было легко увидеть, что потребление памяти быстро выросло за пределы того, что было бы доступно (моя машина для разработки выделила больше памяти, так что здесь все в порядке, но вживую вылетает)...

Общая концепция была такой:

Multiple Producers -> BoundedChannel -> Multiple Transform Consumers -> BoundedChannel ... etc..

Проблема в том, что если каналы, например, допускают 100000 элементов, когда первый заполняется, все в порядке, но, очевидно, лимит для всего конвейера увеличивается по мере того, как мы проходим шаги, с 3 шагами предел внезапно становится 100,000 * 3...

Ofc. мы могли бы просто тогда сказать, что предел составляет 33000, что будет ~100000 для всего конвейера вместе, однако я бы хотел разрешить балансировать лимит по всем каналам, чтобы нам не пришлось его настраивать, если мы добавим больше шагов или настроим это в зависимости от того, где это наиболее интенсивно...

Я не могу понять, допускает ли структура потока данных такой конвейер?

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

0 ответов

Другие вопросы по тегам