Пул потоков PHP?


Я запланировал выполнение задания CRON каждые 4 часа, которое должно собирать информацию об учетных записях пользователей. Теперь я хочу ускорить процесс и разделить работу между несколькими процессами и использовать один процесс для обновления базы данных MySQL данными, полученными из других процессов.

В JAVA я знаю, что есть пул потоков, которому я могу выделить несколько потоков для выполнения определенной работы.

Как мне это сделать на PHP?

Любые советы приветствуются.

Спасибо

Author: embedded, 2010-04-07

7 answers

Как уже говорили другие, процессы разветвления проще, чем создание потоков с помощью PHP. Но почему вы думаете, что наличие одного выделенного потока для записи результатов обратно в базу данных является хорошей идеей? Хотя это немного проще сделать с потоками, а не с процессами, это все еще сложные накладные расходы, которые, похоже, не добавляют никакой ценности общей цели.

Действительно, намного проще запустить несколько экземпляров скрипта (с некоторым параметром для разделения данные) из cron, а не инициировать форк из кода PHP - и не беспокоиться о каких-либо узких местах для записи данных обратно в базу данных.

C.

 1
Author: symcbean, 2010-04-07 15:32:29

PHP, вероятно, не самый подходящий язык для многопоточности.

Возможно, вам захочется взглянуть на другие решения. Например, Бережливость позволяет вам иметь интерфейс PHP, взаимодействующий с серверной частью Java, где вы могли бы легко реализовать желаемое поведение.

Если вы все еще хотите сделать это на PHP, возможно, вам захочется взглянуть кому:

Http://www.php.net/pcntl

Http://www.electrictoolbox.com/article/php/process-forking/

 6
Author: Roberto Aloi, 2011-11-13 16:48:54

PHP и потоки (эти 2 слова) не могут сочетаться в одном предложении. PHP не поддерживает потоки. Вы можете попробовать механизмы разветвления pcntl или асинхронную обработку, которые в вашем случае не помогут.

Вы можете использовать механизм распределения рабочей нагрузки, который может быть тем, что вам нужно, взглянув на Gearman (предлагаю вам погуглить его).

Как описано другими, "это распределенная разветвительная машина", которая может предложить распределение рабочей нагрузки, которое вы ищете для того, чтобы "ускорить процесс".

С уважением,

 2
Author: Andreas, 2010-04-07 13:26:27

Вы также можете создавать новые процессы в PHP: pcntl_fork()

КСТАТИ. этот скрипт работает дольше 4 часов? В противном случае я не вижу причин усложнять это управлением потоками или процессами.

 0
Author: Messa, 2010-04-07 11:57:31

Вы также можете ознакомиться с этой статьей, в которой показано, как имитировать потоковую обработку, включая диспетчер пула потоков с использованием асинхронных HTTP-вызовов и веб-сервер:

Http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/

 0
Author: Lior Ben-Kereth, 2011-05-15 12:34:32

Хороший пул процессов Arbow на github С модификацией, упомянутой здесь

 0
Author: OSP, 2017-05-23 12:12:54

Проверьте эти сообщения - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/

В основном вам нужно обмениваться данными между процессами, и, как я вижу, вам, вероятно, сначала нужно будет записать в какой-нибудь файл. Извлеките с помощью основного процесса (сделайте его процессом типа опроса ajax) и запишите в БД.

 0
Author: pinaki, 2018-09-20 19:48:58