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