Типичная проблема, которая возникает при обработке большого потока сообщений:
- нельзя пропихнуть большого слона через маленькую трубу, т.е. обработка сообщений не успевает «проглотить» все сообщения
При этом существуют некоторые ограничения на поток данных :
- поток не равномерный и состоит из событий разного типа
- количество типов событий заранее не известно, но конечное число
- каждый тип события имеет свою актуальность во времени
- все типы событий имеют равный приоритет
На диаграмме приведён пример разрешения проблемы: нагребатор работает на нитке T1, а следовательно разгребатор на нитке T2
- за время обработки события типа A успевают прийти новые события как типа B, так и A
- после обработки события типа B необходимо обработать наиболее актуальное событие типа A
Проблема осложняется ещё тем, что может быть несколько нагребаторов, при этом каждый нагребатор может порождать только события одного типа; так и есть потребность в нескольких разгребаторах - при этом
Терминология. Stream есть поток данных, тогда как thread есть нитка или нить выполнения. И не стоит путать потоки с нитками.