Интересно как бы выглядел периодический планировщик аля примитивный cron на ML-подобных ЯП?
Задача: с заданной перидичностью запускать какие-то действия. Причём у каждого действия своя переодичность выполнения.
На питоне я сделал так (можете сделать по-своему): Задачи складываются в очередь «ожидания» с приоритетом, где приоритет есть unix timestamp когда оно должно запуститься. Более срочные задачи в очереди стоят первыми.
Из этой очереди мы потихоньку достаём задачи по одной и ждём нужное время, потом перекладываем в очередь на выполнение где задачи выполняются воркерами. Отработавший воркер опять кладёт задачу в очередь ожидания. Т.е. задачи циркулируют как бы по кругу, перекладываясь между очередями.
На случай если новая задача должна быть выполнена быстрее всех мы обрываем текущий таймер ожидания и расчитываем новое время которое нужно спать . Т.е. рестарт таймера (самый дурацкий момент в алгоритме).
Тут есть нюанс: задача планируется только по завершению обработки. Т.е. не получится так что новый процесс проверки запуститься до того как завершаться старые.