예제 #1
0
 public function start($options = PTHREADS_INHERIT_ALL)
 {
     ThreadManager::getInstance()->add($this);
     if (!$this->isRunning() and !$this->isJoined() and !$this->isTerminated() and !$this->isShutdown()) {
         return parent::start($options);
     }
     return false;
 }
예제 #2
0
 public function start(int $options = PTHREADS_INHERIT_ALL)
 {
     ThreadManager::getInstance()->add($this);
     if (!$this->isRunning() and !$this->isJoined() and !$this->isTerminated()) {
         if ($this->getClassLoader() === null) {
             $this->setClassLoader();
         }
         return parent::start($options);
     }
     return false;
 }
예제 #3
0
 public function testWorkerGc()
 {
     $worker = new Worker();
     $work = new WorkerTestWork();
     $worker->start();
     $worker->stack($work);
     $worker->shutdown();
     $this->assertEquals(1, $worker->collect(function ($task) {
         return false;
     }));
     $this->assertEquals(0, $worker->collect(function ($task) {
         return $task->isGarbage();
     }));
 }
예제 #4
0
 private function startWorkers()
 {
     $wrapper = realpath(__DIR__ . '/../../../../bin/phpunit-wrapper');
     for ($i = 1; $i <= $this->options->processes; $i++) {
         $worker = new Worker();
         if ($this->options->noTestTokens) {
             $token = null;
         } else {
             $token = $i;
         }
         $worker->start($wrapper, $token);
         $this->streams[] = $worker->stdout();
         $this->workers[] = $worker;
     }
 }
예제 #5
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);
 }
예제 #6
0
파일: index.php 프로젝트: alexeylatypov/pi
    $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();
 public function start(int $options = PTHREADS_INHERIT_ALL)
 {
     return parent::start(PTHREADS_INHERIT_NONE);
 }
예제 #8
0
 public final function start($options = PTHREADS_INHERIT_ALL)
 {
     ThreadManager::getInstance()->add($this);
     return parent::start($options);
 }
예제 #9
0
 public function start()
 {
     return parent::start(PTHREADS_INHERIT_NONE);
 }
예제 #10
0
 /**
  * Start the worker
  * @param type $options
  * @return type
  */
 public function start($options = null)
 {
     return parent::start($this->inheritance);
 }