вторник, сентября 26, 2006

Реализация многопоточности в PHP

Наткнулся на скрипт для реализации многопоточности с помощью неблокирующихся сокетов в PHP: http://www.stableversion.com/2006/04/17/multithread-php/. Пока не пробовал, но реализация интересная, и по видимому "самая правильная".

У меня сейчас есть только один мощный скрипт, который фигачит в многопоточном режиме - всё работает следующим образом: раз в минуту curl'ом запускается скрипт лаунчера, который иницилизирует и запускает нужное кол-во потоков с помощью curl'а. Потоки отрабатывают (ограничение по времени работы - минута) и сами отмирают. Схема пусть чуть корявая, но придуманная опытным путём, и у неё есть одно неоспоримое преимущество: если сервер упадёт, то сразу как он заработает, система сама запустится и будет фигачить дальше как не бывало. Пока переделывать всё это нет никакого желания =)

2 комментария:

Анонимный комментирует...

А пример можешь показать, как контролировать число потоков?

Andrew комментирует...

Очень примерно

for($i=1; $i<=$limit; $i++) {

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
} //for

$limit - это кол-во потоков, при такой схеме 30-50
$url - это путь к файлу процесса (отдельного потока), я ему передаю определённые параметры, и он делает то что нужно, у скрипта потока стоит ограничения выполнения по времени 30-45 секунд
Сам скрипт вызывается каждую минуту

Получается каждую минуту у нас создаётся $limit потоков