Столкнулся с задачей написания приложения которое делало бы несколько операций одновременно из одного скрипта PHP.
Нашел решение позволяющее:
1. Когда скрипт медленно получает данные и растёт время простоя. При выводе сложного графика можно одним потоком получать данные из СУБД (выполняется ресурсоемкий запрос), а во втором потоке производить отрисовку.
2. Когда нужно выполнить несколько задач, и более эффективно задействовать процессор.
Можно воспользоваться запуском нескольких копий скрипта, либо же использовал pcntl на более низком уровне, чем хотелось бы.
Пример:
include 'thread.class.php';
include 'threadCollection.class.php';
class MyThread extends Thread
{
public function run()
{
for (;;)
{
echo date('r')."\n";
if (!$this->sleep(2)) {return;}
}
}
}
echo «Starting…\n»;
$threads = new threadCollection;
for ($i = 0; $i < 5; ++$i) {$threads->push(new MyThread);}
$threads->start();
echo «Doing pseudo-job (sleep for 5 seconds)…\n»;
sleep(5);
echo «Pseudo-job in master done. Stopping and waiting…\n»;
$threads->stop();
$threads->wait();
* This source code was highlighted with Source Code Highlighter.
Этот незамысловатый код создает 5 чаилдов, ждет 5 секунд, а потом их останавливает.
Забрать можно здесь — code.google.com/p/phpthread/
Проект прекрасно работает.
Брать можно отсюда http://code.google.com/p/phpthread/