$min = min($foo); // перебор всего массива
$max = max($foo); // перебор всего массива
$fullRange = range($min, $max); // создание нового массива размером с первоначальный
$missed = array_diff($fullRange, $foo); // вычисление расхождения массивов
$sum = array_sum($missed); // перебор всего массива
$n = max($foo); // перебор всего массива, а если массив отсортирован, то и этого не нужно
$asum = ((1+$n)*$n)/2; // простые вычисления
echo $asum-array_sum($foo); // перебор всего массива
Крон запускается за счет посещения
В моём случае остановка на 5 минут - не страшно
опять же, я прикинул - в моём случае это нормально. Было бы плохо, если бы задания прилетали в очередь достаточно плотно, но в моей реальности этого нет.
сообщить брокеру, что задача готова, затем увеличить свой счётчик
если сумма счётчиков не меняется в течение какого-то времени, то спросить у брокера количество задач в очереди
За это отвечает брокер - если по таймауту задача не подтверждена, она автоматически возвращается в очередь. Это была одна из причин, почему я выбрал beanstalk, а не Redis Pub/Sub ( у Redis сейчас заявлен новый механизм, Streams , но мне он показался сложнее )
Этот момент мне неясен. В моём представлении, это так:
1) есть некое оперативное хранилище ( например, Redis )
2) Паблишер туда пишет: "я поставил N заданий". И закончил работу.
3) Каждый Воркер в то же хранилище пишет свой инкрементный счётчик, сколько заданий он сделал.
4) Менеджер работает параллельно воркерам и считает сумму их счётчиков. Как только сумма сошлась с числом от паблишера, все задания обработаны.
Так?
не буду дальше позориться и рассказывать устройство, и так вижу, что тут коряво вышло
Теперь вижу, что подход в целом неверный. Если я боюсь утечек памяти, надо было брать пример с Апача: Менеджер мониторит количество воркеров и запускает новые, если нужно, а воркер обрабатывает фиксированное число заданий ( тысячу, 10 тысяч ) и завершается. Если хочется принудельно завершить воркера, надо смотреть в сторону сигналов.
скидки на товары
string(275) "Хомут обжимной просечной (оцинкованная сталь) ширина 8 мм 3/4" (13-19 мм) – купить по цене завода. Доставка по РФ. Смотреть характеристики, фото, отзывы."
string(271) "Хомут обжимной просечной (оцинкованная сталь) ширина 8 мм 3/4" (13-19 мм) – купить по цене завода. Доставка по РФ. Смотреть характеристики, фото, отзывы."
Что такое активный цикл ожидания?
Вы сделали sleep, все время в нем указанное процессор может отдыхать или делать чтото иное. Было бы сложнее, если нужно чтото еще делать между проверками, а так все также как если бы это было асинхронно из коробки, только вручную.