Пул потоков PHP? - PullRequest
       33

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

6 голосов
/ 07 апреля 2010

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

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

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

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

Спасибо

Ответы [ 7 ]

6 голосов
/ 07 апреля 2010

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

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

Если вы все еще хотите сделать это вPHP, вы можете посмотреть:

http://www.php.net/pcntl

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

2 голосов
/ 07 апреля 2010

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

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

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

С уважением,

1 голос
/ 07 апреля 2010

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

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

С

0 голосов
/ 20 апреля 2013

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

0 голосов
/ 15 мая 2011

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

http://w -shadow.com / блог / 2008/05/24 / улучшенная-нить-моделирование класс-для-PHP /

0 голосов
/ 07 апреля 2010

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

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

0 голосов
/ 07 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...