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