PHP中怎么实现协程任务调度

PHP中怎么实现协程任务调度,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联公司于2013年成立,先为浠水等服务建站,浠水等地企业,进行企业商务咨询服务。为浠水企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

具体如下:

taskId = $taskId;    $this->coroutine = $coroutine;  }  public function getTaskId()  {    return $this->taskId;  }  public function setSendValue($sendValue)  {    $this->sendValue = $sendValue;  }  public function run()  {    if ($this->beforeFirstYield) {      $this->beforeFirstYield = false;      return $this->coroutine->current();    } else {      $retval = $this->coroutine->send($this->sendValue);      $this->sendValue = null;      return $retval;    }  }  public function isFinished()  {    return !$this->coroutine->valid();  }}class Scheduler{  protected $maxTaskId = 0;  protected $taskMap = []; // taskId => task  protected $taskQueue;  public function __construct()  {    $this->taskQueue = new SplQueue();  }  public function newTask(Generator $coroutine)  {    $tid = ++$this->maxTaskId;    $task = new Task($tid, $coroutine);    $this->taskMap[$tid] = $task;    $this->schedule($task);    return $tid;  }  public function schedule(Task $task)  {    $this->taskQueue->enqueue($task);  }  public function run()  {    while (!$this->taskQueue->isEmpty()) {      $task = $this->taskQueue->dequeue();      $task->run();      if ($task->isFinished()) {        unset($this->taskMap[$task->getTaskId()]);      } else {        $this->schedule($task);      }    }  }}function task1(){  for ($i = 1; $i <= 10; ++$i) {    echo "This is task 1 iteration $i.\n";    sleep(1);    yield;  }}function task2(){  for ($i = 1; $i <= 10; ++$i) {    echo "This is task 2 iteration $i.\n";    sleep(1);    yield;  }}$scheduler = new Scheduler;$scheduler->newTask(task1());$scheduler->newTask(task2());$scheduler->run();

运行结果:

This is task 1 iteration 1.This is task 1 iteration 2.This is task 1 iteration 3.This is task 1 iteration 4.This is task 1 iteration 5.This is task 1 iteration 6.This is task 1 iteration 7.This is task 1 iteration 8.This is task 1 iteration 9.This is task 1 iteration 10.

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


网页标题:PHP中怎么实现协程任务调度
网页地址:http://cdiso.cn/article/jiohes.html

其他资讯