◆ __construct()
__construct |
( |
Server |
$server, |
|
|
|
$size |
|
) |
| |
AsyncPool constructor.
- Parameters
-
51 $this->server = $server;
52 $this->size = (int)
$size;
55 $this->workerUsage[$i] = 0;
56 $this->workers[$i] =
new AsyncWorker($this->server->getLogger(), $i + 1);
57 $this->workers[$i]->setClassLoader($this->server->getLoader());
58 $this->workers[$i]->start();
◆ collectTasks()
170 foreach($this->tasks as $task){
171 if($task->isFinished() and !$task->isRunning() and !$task->isCrashed()){
173 if(!$task->hasCancelledRun()){
174 $task->onCompletion($this->server);
177 $this->removeTask($task);
178 }elseif($task->isTerminated() or $task->isCrashed()){
179 $this->server->getLogger()->critical(
"Could not execute asynchronous task " . (
new \ReflectionClass($task))->getShortName() .
": Task crashed");
180 $this->removeTask($task,
true);
◆ getSize()
◆ increaseSize()
- Parameters
-
73 $newSize = (int) $newSize;
74 if($newSize > $this->size){
75 for($i = $this->size; $i < $newSize; ++$i){
76 $this->workerUsage[$i] = 0;
77 $this->workers[$i] =
new AsyncWorker($this->server->getLogger(), $i + 1);
78 $this->workers[$i]->setClassLoader($this->server->getLoader());
79 $this->workers[$i]->start();
81 $this->size = $newSize;
◆ removeTasks()
149 foreach($this->tasks as $task){
151 $this->removeTask($task);
154 if(count($this->tasks) > 0){
157 }
while(count($this->tasks) > 0);
160 $this->workerUsage[$i] = 0;
163 $this->taskWorkers = [];
◆ submitTask()
- Parameters
-
110 if(isset($this->tasks[$task->getTaskId()]) or $task->isGarbage()){
114 $selectedWorker = mt_rand(0, $this->size - 1);
115 $selectedTasks = $this->workerUsage[$selectedWorker];
117 if($this->workerUsage[$i] < $selectedTasks){
118 $selectedWorker = $i;
119 $selectedTasks = $this->workerUsage[$i];
◆ submitTaskToWorker()
submitTaskToWorker |
( |
AsyncTask |
$task, |
|
|
|
$worker |
|
) |
| |
- Parameters
-
90 if(isset($this->tasks[$task->getTaskId()]) or $task->isGarbage()){
94 $worker = (int) $worker;
95 if($worker < 0 or $worker >= $this->size){
96 throw new \InvalidArgumentException(
"Invalid worker $worker");
99 $this->tasks[$task->getTaskId()] = $task;
101 $this->workers[$worker]->stack($task);
102 $this->workerUsage[$worker]++;
103 $this->taskWorkers[$task->getTaskId()] = $worker;
◆ $size
The documentation for this class was generated from the following file:
- src/pocketmine/scheduler/AsyncPool.php