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()); }
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); }
$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();