Похожая проблема для сетевого трафика решена путем "раскладки" пакетов по нескольким очередям разного приоритета (вроде чаще всего 3 шт).
Пример алгоритма
есть 3 очереди: высокий приоритет, средний, низкий.
Данные из очередей извлекаются в таком порядке:
Из высокоприоритетной за проход при наличии данных - 4 сообщения, из среднеприоритетной - 2, из низкоприоритетной -1..
И так и бегаем по кругу - 4, 2, 1, 4, 2, 1....
Распределение сообщений по очередям -- это уже на вашей совести будет :)