Pull to refresh

phpThread: нити в PHP? Запросто

Reading time 2 min
Views 2.1K
Если вы хотите научиться писать многопоточные приложения на PHP или здорово упростить себе жизнь — статья для вас.

Раньше для этих целей я пользовался либо запуском несколько копий скрипта, либо же использовал pcntl на более низком уровне, чем хотелось бы. Это, а от части и Java-идеология работы с потоками, побудили меня к написанию пакета phpThread.

Итак:
<?php
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
Проект написан буквально на коленке, однако прекрасно работает.
На данный момент исходники весят 1 247 байт.
В ближайших планах — сделать удобную работу с конкурентными хранилищами.

Данную технику стоит применять:

1. Когда программа недостаточно быстро получает данные и растёт время простоя. Например, при генерации красивого графика можно одним потоком получать данные из СУБД (выполняется тяжелый запрос), а во втором потоке производить отрисовку.

2. Когда нужно выполнить несколько операционных задач, и более эффективно задействовать процессор.

Буду рад любым отзывам, идеям, и замечаниям.

Спасибо за внимание.
Tags:
Hubs:
+47
Comments 78
Comments Comments 78

Articles