Концептуально фильтры представляют вычисления в архитектуре «фильтр-труба», поэтому я думаю, что имеет смысл связывать потоки с фильтрами (если потоки используются вообще).Каналы - это «коммуникационная» часть шаблона.
Опять же, концептуально, если информация, извлеченная из найденной страницы, не зависит от каких-либо других данных, то использование потоков для них имеет смысл только в случае многопроцессорности.Я также не уверен, почему существует необходимость в главном потоке - возможно, вы можете уточнить.
Вместо использования низкоуровневых устройств чтения / записи, почему бы не рассмотреть очереди сообщений?