Введение
Решил написать о многопоточности в PHP. Иногда бывает,что работа выполняется быстрее в нескольких потоках. Полноценную многопоточность как в Perl в PHP можно организовать с натяжкой. Но все же существует несколько способов
1)Запуск нескольких копий скрипта с помощью функции system
Код:

system("/usr/local/bin/php -f index.php par1 par2&");

Но этот вариант не практичный. Т.к. Нужен сервер с огромным каналом и огромным количеством Оперативной Памяти.
2)PHP Thread
Чесnно говоря метод для меня новый.НО как оказалаось весьма полезный.
master.php
Код:

<?php
$array = array( /*Создаем массив*/
0 => 'thread',
1 => 'hello',
2 => 'world');
thread_set('mySharedVar', $array);/*Расшариваем его для thread.php*/
thread_include('thread.php');/*Инклдуим thread.php*/
sleep(3);/*Ждем 3 секунды пока выполняется*/
echo 'Done';/*Выводим Done*/
?>

thread.php
Код:

<?php
$array = thread_get('mySharedVar');
print_r($array);
sleep(5);
echo 'Done';
?>

Честно стибрено Отсюда
3)Использование функции pcntl для организации (распараллеливания) процессов.
Основная функция
Код:

int pcntl_fork ( void )

Функция для создания дочерних процессов от основного.
Пример с мануала по PHP.
Код:

<?php

$pid*=*pcntl_fork();
if*($pid*==*-1)*{
*****die('could*not*fork');
}*else*if*($pid)*{
*****//*we*are*the*parent
*****pcntl_wait($status);*//Protect*against*Zombie*children
}*else*{
*****//*we*are*the*child
}

?>

Фунция pcntl_alarm(тайм аут). Дает сигнал следующему процессу через указанное количество секунд
Пример с мануала по PHP.
Код:

<?php
*** declare(ticks = 1);

*** function signal_handler($signal) {
** * ** print "Caught SIGALRM\n";
** * ** pcntl_alarm(5);
*** }

*** pcntl_signal(SIGALRM, "signal_handler", true);
*** pcntl_alarm(5);

*** for(;;) {
*** }

?>

pcntl_exec() Запуск еще одной программы одновременно с использованием скрипта. Можно юзать для запуска копии скрипта. Альтернатива 1 варианту
Код:

pcntl_exec("/usr/local/bin/php -f thread.php");

Скомбинировав эти фунции можно сделать многпоточность. Кстати, pcntl -это модуль, и его в стандартной сборке PHP нет.
Многпоточность в контексте сетевого взаимодействия
4)С помощью cURL(curl_multi)
Код:

$mh=curl_multi_init();//Открываем сессию curl_multi
// выполняем запрос
$running = null;
* do {
* * curl_multi_exec($mh, $running);
* } while($running> 0);
*
* // получаем данные и уничтожаем дискриптор
* foreach($curly as $id => $c) {
* * $result[$id] = curl_multi_getcontent($c);
* * curl_multi_remove_handle($mh, $c);
* }
*
* // закрываем многосложный дескриптор
* curl_multi_close($mh);

5)Неблокируемые сокеты
Можно использовать уже готовые классы с неблокируемыми сокетами,вы их без труда найдете если погуглите)
Либо
Код:

while(true)
{
//Код
if(max_threads=count($sock))
{
//Код
}
//Создаем сокет
$errno = 0;
$error = “”;

$socket = fsockopen($url_info[host], $url_info[port], $errno, $error, 30);
stream_set_blocking($socket, 0);
stream_set_timeout($socket, 3600);
fputs($socket, $query);

// запоминаем запущенный сокет

$sockets[md5(time())] = $socket;

Заключение
Ну вот в приницпе и все. Знаю,что написал бред,подкорректируйте плз.

Источник: http://forum.antichat.ru/thread98635.html