запускаем какой-то код, который диспатчит Job в очередь, которую мы предварительно уже слушаем, то получается мы какую-то часть выполняем синхронно, а вторую асинхронно
Как это работает вообще внутри. На сервере просто запускается новый php процесс?
и таким образом можно хоть 100 процессов запустить одновременно?
да
Нету общего метода "как работает внутри". Есть масса вариаций. У меня была реализация: 1. Очередь в БД. 2. Обработчик-балансер - проверяет по крону каждую минуту длину очереди - на каждый 10 элементов очереди запускает отдельный процесс "разборщика" (система сдёргивала фалйы с другого хоста и разбирала данные) с лимитом в 20 процессов. Каждый процесс молотил пока не кончалась очередь. 3. Сами разборщики просто брали первую запись из очереди с флагом "wait", тут же обновляли эту запись на флаг "process" и уходили в обратку. Если разборщик не находил ни одной записи "wait" - завершение. Была и другая - болтался inotifywait, который по записи файла в каталог очереди запускал обработчик, обработчик по завершении работы проверял длину очереди - и если очередь длиннее 5 файлов - проверял сколько обработчиков запущено и если меньше чем "1 обработчик на каждые 5 файлов" - запускал дополнительные процессы. Вариантов масса на самом деле.
Обсуждают сегодня