stack() public method

Appends the referenced object to the stack of the referenced Worker
public stack ( Collectable &$work ) : integer
$work Collectable Collectable object to be executed by the referenced Worker
return integer The new length of the stack
 public function testGetStacked()
 {
     $worker = new Worker();
     $work = new WorkerTestWork();
     $worker->stack($work);
     $this->assertEquals(1, $worker->getStacked());
     $worker->stack($work);
     $this->assertEquals(2, $worker->getStacked());
 }
Beispiel #2
0
 public function testWorkerGc()
 {
     $worker = new Worker();
     $work = new WorkerTestWork();
     $worker->start();
     $worker->stack($work);
     $work->synchronized(function ($work) {
         if (!$work->isGarbage()) {
             $work->wait();
         }
     }, $work);
     $this->assertEquals($worker->collect(function ($task) {
         return false;
     }), 1);
     $this->assertEquals($worker->collect(function ($task) {
         return $task->isGarbage();
     }), 0);
 }
Beispiel #3
0
    $np = 0;
    for ($i = 0; $i <= $n; $i++) {
        $x = lcg_value() * 2 - 1;
        $y = lcg_value() * 2 - 1;
        if ($x ** 2 + $y ** 2 <= 1) {
            $np++;
        }
    }
    return $np;
};
/* make call in background thread */
$argv = [$interation / $threads];
$time_start = microtime(true);
$np_result = 0;
// Initialize and start the threads
$worker = new Worker();
$work = array();
$o = 0;
while (++$o < $threads) {
    /* items stacked could be using resources available in worker */
    $work[] = new ParallelThread($closure, $argv);
}
foreach ($work as $w) {
    $worker->stack($w);
}
$worker->start();
//$pi = 4 * $np_result / ($argv[0]*($threads));
//echo $np_result."<br>";
//echo $pi."<br>";
echo microtime(true) - $time_start;
$worker->shutdown();