Я запланировал задание CRON каждые 4 часа, которое должно собирать данные учетных записей пользователей. Теперь я хочу ускорить работу и разделить работу между несколькими процессами и использовать один процесс для обновления базы данных MySQL с извлеченными данными из других процессов.
В JAVA я знаю, что есть пул потоков, который я могу посвятить некоторым потокам для выполнения некоторой работы.
как это сделать в PHP?
Любые советы приветствуются.
спасибо
Как говорили другие, процессы forking проще, чем нерестовые потоки с PHP. Но почему вы считаете, что наличие единственного выделенного потока для записи результатов в базу данных – хорошая идея? Хотя это немного проще делать с потоками, а не с процессами, это все еще сложная служебная информация, которая, похоже, не добавляет никакого значения общей цели.
В самом деле, гораздо проще запустить несколько экземпляров сценария (с некоторым параметром для разделения данных) из cron, а не инициировать вилку из PHP-кода, – и не беспокоить любое узкое место для записи данных обратно в базу данных ,
C.
PHP, вероятно, не самый подходящий язык для многопоточности.
Возможно, вы захотите взглянуть на разные решения. Например, Thrift позволяет вам иметь интерфейс PHP с интерфейсом Java, где вы можете легко реализовать желаемое поведение.
Если вы все еще хотите сделать это в PHP, вам может понадобиться посмотреть:
PHP и Threads (эти 2 слова) не могут сочетаться в одном и том же предложении. PHP не поддерживает потоковую поддержку. Вы можете попробовать механизмы pcntl forking или асинхронную обработку, которая в вашем случае не является полезной.
Вы можете использовать механизм распределения рабочей нагрузки, который может быть тем, что вы хотите, взглянув на Gearman (предложите вам его Google).
Как описано другими «это распределенная машина для форкинга», которая может предложить распределение рабочей нагрузки, которое вы ищете, чтобы «ускорить процесс».
С уважением,
Чеч эти сообщения – * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/
В основном вам необходимо обмениваться данными между процессами, и, как я вижу, вам, вероятно, придется сначала записать в файл. Извлеките с помощью основного процесса (сделайте его процессом типа ajax-poll) и напишите в DB.
Вы также можете развить новые процессы в PHP: pcntl_fork ()
КСТАТИ. этот скрипт работает дольше 4 часов? В противном случае я не вижу причин, с помощью которых это затрудняет управление потоками или процессами.
Вы также можете проверить эту статью, которая показывает, как имитировать потоки, включая диспетчер пулов потоков, используя асинхронные HTTP-вызовы и веб-сервер:
http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/
Хороший пул процессов Arbow on github