public function submitTask(AsyncTask $task) { if ($task->isGarbage()) { return; } $this->tasks[$task->getTaskId()] = $task; $this->pool->submit($task); }
private function removeTask(AsyncTask $task, $force = false) { if (isset($this->taskWorkers[$task->getTaskId()])) { if (!$force and ($task->isRunning() or !$task->isGarbage())) { return; } $this->workerUsage[$this->taskWorkers[$task->getTaskId()]]--; } unset($this->tasks[$task->getTaskId()]); unset($this->taskWorkers[$task->getTaskId()]); $task->cleanObject(); }
public function submitTask(AsyncTask $task) { if (isset($this->tasks[$task->getTaskId()]) or $task->isGarbage()) { return; } $this->tasks[$task->getTaskId()] = $task; $selectedWorker = mt_rand(0, $this->size - 1); $selectedTasks = $this->workerUsage[$selectedWorker]; for ($i = 0; $i < $this->size; ++$i) { if ($this->workerUsage[$i] < $selectedTasks) { $selectedWorker = $i; $selectedTasks = $this->workerUsage[$i]; } } $this->workers[$selectedWorker]->stack($task); $this->workerUsage[$selectedWorker]++; $this->taskWorkers[$task->getTaskId()] = $selectedWorker; }
public function collectAsyncTask(AsyncTask $task) { if ($task->isFinished() and !$task->isGarbage()) { --$this->asyncTasks; $task->onCompletion(Server::getInstance()); $task->setGarbage(); unset($this->asyncTaskStorage[$task->getTaskId()]); } return $task->isGarbage(); }