婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP實現簡單的協程任務調度demo示例

PHP實現簡單的協程任務調度demo示例

熱門標簽:昭通辦理400電話 岳陽外呼型呼叫中心系統在哪里 山西回撥外呼系統 百應電話機器人服務 騰訊外呼管理系統 青島語音外呼系統招商 河南電銷卡外呼系統哪家強 揚州地圖標注app 山西探意電話機器人

本文實例講述了PHP實現簡單的協程任務調度。分享給大家供大家參考,具體如下:

?php
class Task
{
  protected $taskId;
  protected $coroutine;
  protected $sendValue = null;
  protected $beforeFirstYield = true;
  public function __construct($taskId, Generator $coroutine)
  {
    $this->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相關內容感興趣的讀者可查看本站專題:《PHP進程與線程操作技巧總結》、《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php使用gearman進行任務分發操作實例詳解
  • python基于json文件實現的gearman任務自動重啟代碼實例
  • PHP并發多進程處理利器Gearman使用介紹
  • Gearman::XS在Centos下的編譯安裝方法
  • gearman隊列持久化引發的問題及解決方法
  • gearman的安裝啟動及python API使用實例
  • rhel5.7下安裝gearmand及啟動的方法
  • PHP 進程池與輪詢調度算法實現多任務的示例代碼
  • PHP 多進程與信號中斷實現多任務常駐內存管理實例方法
  • php解決crontab定時任務不能寫入文件問題的方法分析
  • gearman管理工具GearmanManager的安裝與php使用方法示例

標簽:宜賓 銅川 南陽 湛江 黃南 婁底 寶雞 鎮江

巨人網絡通訊聲明:本文標題《PHP實現簡單的協程任務調度demo示例》,本文關鍵詞  PHP,實現,簡單,的,協程,任務,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現簡單的協程任務調度demo示例》相關的同類信息!
  • 本頁收集關于PHP實現簡單的協程任務調度demo示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 伊川县| 东辽县| 夹江县| 青阳县| 盐亭县| 吴忠市| 萨迦县| 无为县| 杂多县| 信阳市| 万山特区| 拜泉县| 夹江县| 黄石市| 苏尼特右旗| 穆棱市| 哈巴河县| 扬中市| 平陆县| 黄大仙区| 巴南区| 衡水市| 新乐市| 泾阳县| 略阳县| 建昌县| 广宁县| 阿瓦提县| 扎赉特旗| 广昌县| 闸北区| 海门市| 临汾市| 石景山区| 陆川县| 柏乡县| 巴里| 通化市| 永宁县| 三原县| 东乌珠穆沁旗|