好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 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示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产露脸精品一区二区| 揉我奶?啊?嗯高潮樱奈| www在线观看| 综合网亚洲| 一级毛片免费观看视频| 《3D肉蒲团之极乐宝鉴》蓝燕 | 91麻豆精品国产| 大尺度吃奶呻吟视频3D| 欧美自拍另类欧美综合图区| 一区二区三区在线视频观看| 含羞草免费观看电视剧的背景故事| 欲荤h肉奶香np| 成人A片无码专区精品爆乳APP| 用力别停我要我受不了了视频| 护士无码一区二区三区| ticklemen男人网站视频| 国产色情性黄?免费观看| 校花的婬肉泬被c小说| 技女影院| 欧美一级做一级做片性十三| 男女秘?无遮挡視頻视频在线| 欧美AV无码国产青草视频| 曰批免费动漫视频播放免费| 日本免费看片| 成年人羞羞视频| 高清毛片aaaaaaaa**| 健身房被教练啪到腿软H漫画| 毛片免费软件| 国产午夜精品一区二区| 高辣h文乱乳H文浪荡小说苏柔| 大二清凉美人后山原著小说| 嗯啊校长| 乖女从小调教h尿| 日本一级婬片免费放| 亚洲嫩草影院久久精品| 久久精品国产精品国产精品污| 国精产品一区一区三区四区有限 特点 | 波多野结衣中文无码AV人妻系列| 办公室白领被强d系列小说| 欧美理论| 用力?别停?受不了|