Скорее всего, вы хотите использовать систему очереди / работника, которая подробно описана здесь: https://laravel.com/docs/6.x/queues
Одна из возможных настроек включает Supervisor (Linux монитор процесса ), который обеспечивает выполнение команды php artisan queue:work
в фоновом режиме и перезапускается при возникновении ошибки.
В конфигурации супервизора вы можете определить, что вы хотите 4 экземпляра этого запуска, используя numprocs=4
в файле /etc/supervisor/conf.d/laravel-worker.conf
.
Basi c объяснение очереди
Так что в основном все зависит от очереди, которая для Laravel может быть Redis
(я могу рекомендовать это ), Beanstalkd
или обычное database table
, называемое «заданиями» (последнее может быть не лучшим решением для производственных сред), или любая другая выбранная вами реализация.
Скажите, если у вас работает 4 рабочих, один из запущенных процессов queue:work
подберет и зарезервирует задание, как только оно станет доступным в вашей очереди. Таким образом, несколько заданий в очереди могут быть зарезервированы разными работниками.
Обратите внимание, что несколько процессов выполняются параллельно, что означает, что если вы поставите в очередь sh 3 заданий, вы не сможете предположить, что они будут обработаны. в порядке 1-2-3. Они начинаются в этом порядке, но они могут не заканчиваться sh в этом порядке. Поэтому вы должны помнить об этом при выполнении любых операций чтения или записи, таких как запросы к базе данных. В зависимости от ваших потребностей, вы можете установить количество процессов на 1
, чтобы обеспечить правильный порядок выполнения, но это может значительно ограничить вашу пропускную способность.