![]() |
Многопоточность на PHP
Введение
Решил написать о многопоточности в PHP. Иногда бывает,что работа выполняется быстрее в нескольких потоках. Полноценную многопоточность как в Perl в PHP можно организовать с натяжкой. Но все же существует несколько способов 1)Запуск нескольких копий скрипта с помощью функции system Код:
system("/usr/local/bin/php -f index.php par1 par2&");2)PHP Thread Чесnно говоря метод для меня новый.НО как оказалаось весьма полезный. master.php Код:
<?phpКод:
<?php3)Использование функции pcntl для организации (распараллеливания) процессов. Основная функция Код:
int pcntl_fork ( void )Пример с мануала по PHP. Код:
<?phpПример с мануала по PHP. Код:
<?phpКод:
pcntl_exec("/usr/local/bin/php -f thread.php");Многпоточность в контексте сетевого взаимодействия 4)С помощью cURL(curl_multi) Код:
$mh=curl_multi_init();//Открываем сессию curl_multiМожно использовать уже готовые классы с неблокируемыми сокетами,вы их без труда найдете если погуглите) Либо Код:
while(true)Ну вот в приницпе и все. Знаю,что написал бред,подкорректируйте плз. Материал по теме _http://habrahabr.ru/blogs/php/40545/ - Еще одна реализация многопоточности на PHP _http://habrahabr.ru/blogs/php/40245/ - Эмуляция многопоточности в PHP _http://habrahabr.ru/blogs/php/40432/ - Многопроцессовые демоны на PHP |
Shaitan-Devil, имхо для статьи недостаточно подробно + для pcntl_fork не написаны методы прострелить себе ногу. Т.е. то на чём обязательно проколятся новички, при попытке её использования на практике.
|
Наверное, создатели CURL в гробу перевернулись, когда их детище поставили в один ряд с функциями pcntl_*. Как это можно сравнивать? Да, это многопоточность, но в контексте сетевого взаимодействия... В общем было миллиард статей на эту тему, это одна из худших...
От себя дополню: http://github.com/danhen/php_threads/tree/master |
На античате традиция - раз в год кто-нибудь пишет про многопоточность в php =)
По сабжу: в примере "Запуск нескольких копий скрипта с помощью функции system" нет даже символа &, обозначающего переход выполнения команды в бэкграунд, т.е. без ожидания ее завершения. В твоем примере этого нет. "Использование функции pcntl для организации (распараллеливания) процессов." Спасибо мануал мы тоже умеем читать. Хотя бы свои наработки показал бы. "С помощью cURL(curl_multi)" среди всех перечисленных способов этот наименее всего подходит под понятие организации многопоточности. К этой же серии также относятся неблокирующие сокеты, о которых вообще ничего не сказано в твоей статье. И как упомянул groundhog ничего нет про php_threads В общем слабо. p.s. выйдет PHP6 тогда и поговорим о многопоточности |
Цитата:
|
Спасибо за конструктивную критику, будем фиксить баги.
|
Цитата:
http://php.su/functions/?cat=pcntl все остальное от лукавого. |
скрипты на php не могут использовать многопоточность
Единственное, что можно сделать это запустить один и тот же скрипт несколько раз, с разными параметрами, чтобы каждый запущенный скрипт обрабатывал свою часть данных. |
Цитата:
Плотно пошарив в инете нашёл таки класс AunoAsyncHttp, на котором в дальнейшем я и выстраивал все свои многопоточные скрипты. |
Пофиксил некоторые баги.
|
| Время: 02:24 |