PHP Australia Conference 2015

The Worker class

(No version information available, might only be in SVN)

Wstęp

Worker Threads have a persistent context, as such should be used over Threads in most cases.

Krótki opis klasy

Worker {
/* Metody */
final public long getCreatorId ( void )
final public int getStacked ( void )
final public long getThreadId ( void )
final public boolean isShutdown ( void )
final public boolean isWorking ( void )
abstract public void run ( void )
final public boolean shutdown ( void )
final public int stack ( Stackable $work )
final public boolean start ( void )
final public int unstack ([ Stackable $work ] )
}

Spis treści

add a note add a note

User Contributed Notes 1 note

up
5
event2game at gmail dot com
10 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