Труба и фильтр, требуется уточнение
Несколько вопросов по трубе и фильтру.
В этом примере, как показано на изображении выше, при реализации:
- Должна ли каждая труба работать в отдельном потоке?
- Должен ли каждый фильтр работать в отдельном потоке?
- Справедливо ли говорить, что Pump только "знает" о первой трубе, которую видит, и ничего не знает остальному миру? Кроме того, справедливо ли говорить, что каждый компонент "знает" только о компонентах один до и один после?
Другими словами, Фильтр проверит, есть ли готовые данные для его сбора и обработки, а затем, и только тогда, 1. обработать его и 2. передать его следующему каналу?
1 ответ
Труба и фильтр - это приложение " разделяй и властвуй", которое с помощью модульности нацелено на простоту реализации и универсальность за счет конфигурации задействованных модулей.
Он находит наибольшую полезность при решении проблемы, которая включает несколько прогонов обработки исходного потока или объекта или сигнала, и запрашивает создание модифицированного потока или объекта или сигнала того же типа.
Он основан на простых небольших единицах обработки, называемых фильтрами, все они следуют одному и тому же контракту (они получают на входе один и тот же тип объекта / потока и необязательные параметры и возвращают обработанный поток / объект). Каждый вход фильтра может быть подключен к (другому или также другому экземпляру) выходу фильтра или к источнику (называемому насосом), аналогичным образом каждый выход фильтра может быть подключен к входу фильтра или к возвратному объекту / пару архитектуры (называемому раковина). Модули соединения называются pipe s и используются классом менеджера для маршрутизации потока / объекта / сигнала через различные этапы обработки, выполняемые в фильтрах.
Сделка при указании контракта заключается в том, что каждый фильтр может действовать автономно, ничего не зная ни о других фильтрах, ни об обработке всего потока. Это означает, что фильтры также могут быть прозрачно заменены, что дает разные конечные результаты.
Хотя экземпляры фильтров могут одновременно выполняться в разных потоках, конвейер и шаблон фильтра обычно не используются для параллельной работы, поскольку каждый фильтр в большинстве случаев требует доступа к одному и тому же ресурсу.
- пример программного обеспечения: фильтры в обработке изображений
- Пример из реальной жизни: педальные эффекты, обрабатывающие звуковой сигнал между гитарой и усилителем.