В настоящее время я пытаюсь реализовать очередь заданий в php. Затем очередь будет обрабатываться как пакетное задание и должна иметь возможность обрабатывать некоторые задания параллельно.
Я уже провел некоторые исследования и нашел несколько способов его реализации, но я не знаю их преимуществ и недостатков.
например. выполните параллельную обработку, вызвав script несколько раз через fsockopen
, как описано здесь:
Простая параллельная обработка в PHP
Другой способ, который я нашел, - использовать функции curl_multi
.
curl_multi_exec PHP docs
Но я думаю, что эти два способа добавят слишком много накладных расходов для создания пакетной обработки в очереди. taht должен в основном работать на фоне?
Я также читал о pcntl_fork
, который также кажется способом решения этой проблемы. Но похоже, что это может стать действительно грязным, если вы действительно не знаете, что делаете (например, я на данный момент;)).
Я также посмотрел на Gearman
, но там мне также нужно было бы порождать рабочие потоки динамически по мере необходимости, а не просто запускать несколько и позволить серверу работы ретранслятора затем отправлять его свободным рабочим. Тем более, что потоки должны выполняться чисто после того, как одно задание выполнено, чтобы не запускать возможные утечки памяти (код может быть не идеальным в этой проблеме).
Gearman Начало работы
Итак, мой вопрос: как вы обрабатываете параллельную обработку в PHP? И почему вы выбираете свой метод, какие преимущества/недостатки могут иметь разные методы?
Спасибо за любой ввод.