Труба и фильтр, требуется уточнение - PullRequest
3 голосов
/ 29 января 2012

Несколько вопросов по трубе и фильтру.

enter image description here

В этом примере, как показано на рисунке выше, при реализации:

  1. Должен каждыйТруба будет работать в отдельном потоке?
  2. Должен ли каждый фильтр работать в отдельном потоке?
  3. Справедливо ли говорить, что Pump только «знает» о первой трубе, которую видит, и ничего не знаетдля остального мира?Кроме того, справедливо ли говорить, что каждый компонент «знает» только о компонентах один до и один после?

Другими словами, фильтр проверит, есть ли данные, готовые для его выбора.и обработать, а затем и только потом 1. обработать и 2. передать на следующий канал?

1 Ответ

5 голосов
/ 29 января 2012

Труба и фильтр - это приложение split-et-impera , которое с помощью модульности нацелено на простоту реализации и универсальность за счет конфигурации задействованных модулей.

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

Он основан на простых небольших единицах обработки, называемых filter s, все они следуют одному и тому же контракту (они получают на входе один и тот же тип объекта / потока и необязательные параметры и возвращают обработанный поток / объект ). Каждый вход фильтра может быть подключен к (другому или также самому другому) выходу фильтра или к источнику (называемому pump ), аналогично каждый выход фильтра может быть подключен к входу фильтра или к архитектуре. возврат объекта / пара (называемый раковина ). Блоки соединения называются pipe s и используются классом менеджера для маршрутизации потока / объекта / сигнала через различные этапы обработки, выполняемые в фильтрах.

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

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

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