Предотвращение голодания в приоритетной очереди - PullRequest
0 голосов
/ 29 апреля 2018

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

Item     Priority
--------------------
Item A      0      //Lowest priority
Item B      1
Item C      2
Item D      3
Item E      4      //Highest priority

Теперь, если мы получим последовательный поток элементов с более высоким приоритетом в нашей очереди приоритетов (B-E), мы никогда не сможем обрабатывать пакеты с более низким приоритетом (A). Интересно, какие существуют алгоритмы для решения этой проблемы?

Простой подход, который приходит мне в голову, - это ограничение обработки разных типов предметов в зависимости от приоритета. Например, мы ограничиваем обработку пакетов каждого типа 2 ^ priority. Таким образом, для таблицы выше, после передачи 16 предметов типа Item E, мы будем обрабатывать до 8 предметов типа Item D, до 4 из Item C, до 2 из Item B и до 1 из Item A прежде чем снова начать обрабатывать Item E. Это предотвратит голодание для разных типов предметов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...