Сайт справки
  • Авторизация
  • Обратная связь
  • Теги
    • Joomla
      • JLoader
      • Mootools
      • Bootstrap
      • jQuery
      • jQuery UI
      • Конфликты JS
      • Joomla! Javascript Framework
      • JS Фреймворки
      • Ajax
      • JS
      • MVC
      • JoomShopping
      • Сессии
    • JS

Расширенный поиск
  • Главная
  • Разное
  • PHP
  • PHP-CPP
  • 22 Динамическая загрузка.
  • php
  • Многопоточность
  • pthreads
  • Worker

(PECL pthreads >= 2.0.0)

Введение

Потоки Worker имеют постоянный контекст, поэтому в большинстве случаев их следует использовать поверх классов Threads.

Когда Worker запускается, метод Run будет выполнен, но поток не оставится, пока не будет выполнено одно из следующих условий:

  • Worker выходит за пределы области действия (больше не остается ссылок)

  • программист вызывает завершение работы

  • скрипт завершается

Это означает, что программист может повторно использовать контекст во время выполнения; размещение объектов в стеке Worker приведет к тому, что Worker будет выполнять метод выполнения с накоплением объектов.

Обзор классов

class Worker extends Thread implements Traversable , Countable , ArrayAccess {
	/* Методы */
	public int collect ([ Callable $collector ] )
	public int getStacked ( void )
	public bool isShutdown ( void )
	public bool isWorking ( void )
	public bool shutdown ( void )
	public int stack ( Threaded &$work )
	public int unstack ( void )
	/* Наследуемые методы */
	public void Thread::detach ( void )
	public int Thread::getCreatorId ( void )
	public static Thread Thread::getCurrentThread ( void )
	public static int Thread::getCurrentThreadId ( void )
	public int Thread::getThreadId ( void )
	public static mixed Thread::globally ( void )
	public bool Thread::isJoined ( void )
	public bool Thread::isStarted ( void )
	public bool Thread::join ( void )
	public void Thread::kill ( void )
	public bool Thread::start ([ int $options ] )
}

Существует один способ совместного использования данных между Workers, то есть с помощью Stackable:

<?php
class data extends Stackable{
    //private $name;
    public function __construct($_name) {
        //$this->name = $_name;//если вы установите любую переменную, работники получат переменную, поэтому не устанавливайте никакой переменной
        echo __FILE__.'-'.__LINE__.'<br/>'.chr(10);
    }
    public function run(){
        echo __FILE__.'-'.__LINE__.'<br/>'.chr(10);
    }
}
class readWorker extends Worker {
    public function __construct(&$_data) {
        $this->data = $_data;//
    }
    public function run(){
        while(1){
            if($arr=$this->data->shift())//receiving datas
            {
                echo 'Received data:'.print_r($arr,1).chr(10);
            }else usleep(50000);
        }
    }
}
class writeWorker extends Worker {
    public function __construct(&$_data) {
        $this->data = $_data;//
    }
    public function run(){
        while(1){
            $this->data[] = array(time(),rand());//запись данных
            usleep(rand(50000, 1000000));
        }
    }

}
$data = new data('');
$reader = new readWorker($data);
$writer = new writeWorker($data);
$reader->start();
$writer->start();
?>

Также вы можете использовать $readWorker[] = $some_data; затем используйте $this->shift() в readWorker, чтобы поделиться данными с readWorker, но если вы это сделаете, у вас не будет переменных в readWorker, так как все переменные будут сдвинуты на shift();

Содержание

Worker::collect — Сбор ссылок на выполненные задачи
Worker::getStacked — Возвращает оставшийся размер стека
Worker::isShutdown — Обнаружение Состояния
Worker::isWorking — Обнаружение состояний
Worker::shutdown — Завершение работы worker
Worker::stack — Добавить задание в стек
Worker::unstack — Удаление работы

  • 08 Лямбда-функции.
  • 16 Исключения.
  • 03 Ваше первое расширение.
  • 11 Наследование классов.
  • 19 Загрузка настроек из php.ini.
  • 14 Специальные функции.
  • 06 Параметры функции.
  • 09 Классы и объекты.
  • 17 Работа с переменными.
  • 20 Обратные вызовы расширения.
  • 04 Генерация выходных данных и ошибок.
  • 12 Магические методы.
  • 15 Свойства класса.
  • 07 Вызов функций.
  • 10 Конструкторы и деструкторы
  • 18 Глобальные константы и константы уровня класса.
  • 21 Пространство имен.
  • 01 Как установить PHP-CPP?
  • 02 Как PHP загружает свои расширения?
  • 05 Регистрация собственных функций
  • Карта сайта

Наверх

© Сайт справки 2025

Яндекс.Метрика