Ленивая обработка отложенных задач
Дано
Предположим у вас есть демон, который отслеживает наступление события, после которого надо его как-то обработать. При этом одновременно запускать обработку нельзя (бесполезно и небезопасно). Со временем обработка начинает занимать очень много времени и ресурсов, а нужна становится только когда пользователь захотел (а это бывает, например, раз в месяц).
Могут быть небольшие отличия, например этот демон – крон, который запускает скрипт, который проверяет наступление события и запускается.
Найти
Способ не напрягать сервер вхолостую, при этом чтобы визуально для пользователя всё не выглядело медленным и тормознутым.
Решение
Один из вариантов – разделение на два демона и небольшая хитрость.
Хитрость – при запросе от пользователя говорить «падажжы, ща» и создавать флаг в том или ином виде. Например файл. Запрос от пользователя, кстати можно делать прозрачным, например при открытии им страницы, а не делать явную кнопочку.
Первый – проверяет наступление события и создает еще один флаг.
Второй – спит и проверяет наличие обоих флагов, при наличии – выполняет долгую обработку и удаляет оба флага.
В итоге – если пользователь не просит, обработка не выполняется «впустую». Если событие не наступает, а пользователь просит ещё – ему отдаются старые данные.