PHP 5.4.31 Released

La clase Worker

(PECL pthreads >= 2.0.0)

Introducción

Los Worker Thread poseen un contexto persistente, por lo que deberían emplearse sobre los Threads en la mayoría de los casos.

Cuando un Worker se inicia, el método run se ejecutará, pero el Thread no abandonará hasta que se dé una de las siguientes condiciones:

  • el Worker sale del ámbito (ya no quedan más referencias)

  • el programador llama al apagado

  • el script finalizar

Esto significa que el programador puede reutilizar el contexto durante toda la ejecución; la colocación de objetos en la pila del Worker ocasionará que el Worker ejecute los objetos apilados del método run.

Advertencia

El programador debe conservar referencias a los objetos apilados hasta que hayan sido ejecutados o desapilados; la clase Pool proporciona una abstracción de más alto nivel de la funcionalidad del Worker, administrando las referencias para el programador.

Sinopsis de la Clase

Worker extends Thread implements Traversable , Countable , ArrayAccess {
/* Métodos */
public integer getStacked ( void )
public boolean isShutdown ( void )
public boolean isWorking ( void )
public boolean shutdown ( void )
public integer stack ( Threaded &$work )
public integer unstack ([ Threaded &$work ] )
/* Métodos heredados */
public void Thread::detach ( void )
public integer Thread::getCreatorId ( void )
public static Thread Thread::getCurrentThread ( void )
public static integer Thread::getCurrentThreadId ( void )
public integer Thread::getThreadId ( void )
public static mixed Thread::globally ( void )
public boolean Thread::isJoined ( void )
public boolean Thread::isStarted ( void )
public boolean Thread::join ( void )
public void Thread::kill ( void )
public boolean Thread::start ([ integer $options ] )
}

Tabla de contenidos

add a note add a note

User Contributed Notes 1 note

up
0
event2game at gmail dot com
8 months ago
There's one way to shared datas between Workers, that is using Stackable:
<?php
class data extends Stackable{
   
//private $name;
   
public function __construct($_name) {
       
//$this->name = $_name;//if you set any variable, workers will get the variable, so do not set any variable
       
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());//writting datas
           
usleep(rand(50000, 1000000));
        }
    }

}
$data = new data('');
$reader = new readWorker($data);
$writer = new writeWorker($data);
$reader->start();
$writer->start();
?>
Also you can use $readWorker[] = $some_data; then use $this->shift() in readWorker to share datas with readWorker, but if you do so you can't have variables in readWorker as all variales will be shift by shift();
To Top