Дано

Предположим у вас есть демон, который отслеживает наступление события, после которого надо его как-то обработать. При этом одновременно запускать обработку нельзя (бесполезно и небезопасно). Со временем обработка начинает занимать очень много времени и ресурсов, а нужна становится только когда пользователь захотел (а это бывает, например, раз в месяц).

Могут быть небольшие отличия, например этот демон – крон, который запускает скрипт, который проверяет наступление события и запускается.

Найти

Способ не напрягать сервер вхолостую, при этом чтобы визуально для пользователя всё не выглядело медленным и тормознутым.

Решение

Один из вариантов – разделение на два демона и небольшая хитрость.

Хитрость – при запросе от пользователя говорить «падажжы, ща» и создавать флаг в том или ином виде. Например файл. Запрос от пользователя, кстати можно делать прозрачным, например при открытии им страницы, а не делать явную кнопочку.

Первый – проверяет наступление события и создает еще один флаг.

Второй – спит и проверяет наличие обоих флагов, при наличии – выполняет долгую обработку и удаляет оба флага.

В итоге – если пользователь не просит, обработка не выполняется «впустую». Если событие не наступает, а пользователь просит ещё – ему отдаются старые данные.