Алгоритм выбора задач на исполнение
Система мониторит некие объекты (в общем смысле) — несколько раз в день снимает с них списки параметров и сравнивает между собой по ходу времени, чтобы примерно локализовать некоторые события изменения.
Считывание кадого происходит порциями: 3 раза по максимум L параметров в 1 секунду. Потом надо ждать, перед следующими запросами. Из-за этого считывание крупных объектов может быть ощутимо длительным, прямо пропорционально "массе" (M) объекта, которая всегда известна заранее.
Считывание запускается по cron'у, пачками. Внутри пачки пока одни объекты ждут следующей "секунды", выполняются другие. Но всё равно из времени выполнения «пачки» около 50% – пассивный простой-ожидание. Увеличить размер пачки не позволяет память.
Собственно, память - это ограниченный ресурс. Сейчас worker сделан на php. При минимальной пачке занимает около 10 Mb, при рабочем размере — около 150. Т.е. запускать несколько мелких взамен одного крупного вряд ли есть смысл.
Вопрос эффективности: наполнять «пачки» так, чтобы время их исполнения максимально приближалось к интервалу крона, но не заходило на запуск следующей пачки. Т.е. что-то типа packing problem.
Мониторинг некоторых объектов бесплатный, некоторых проплачен и должен выполняться почаще. А некоторые находятся в специальном режиме супер-частого мониторинга - должны точно попадать в каждую Пачку подряд (или каждую N-тую, но тоже чётко-строго).
Список объектов в мониторинге постоянно меняется.
Сейчас сделал примитивно: берется N самых давно-считанных объектов. N подобран эмпирически, и эффективность крайне низкая, т.к. иногда все в "пачке" имеют малую массу, и пачка отстреливается совсем быстро. А иногда пара "тяжелых" попадаются, и еле укладывается до следующего запуска из cron'а.
Вопрос — где почитать/как называется задача, какая модель её хорошо описывает, и как бы вы к ней подошли?
В простом случае - как организовать выборку заданий для очередной пачки? В более интересном — как бы организовать вообще весь механизм выполнения заданий?