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

主頁 > 知識庫 > PHP swoole中使用task進程異步的處理耗時任務應用案例分析

PHP swoole中使用task進程異步的處理耗時任務應用案例分析

熱門標簽:咸陽電銷 南寧電話外呼系統線路 南京3D地圖標注 重慶外呼電銷系統多少錢 正規電銷機器人系統 辦理400電話哪家好點 嘟嘟云外呼系統 邢臺400電話辦理 濟源百應電銷機器人聯系方式

本文實例講述了PHP swoole中使用task進程異步的處理耗時任務。分享給大家供大家參考,具體如下:

我們知道,swoole中有兩大進程,分別是 master 主進程和 manager 管理進程。

其中 master 主進程中會有一個主 reactor 線程和多個 reactor 線程,主要的作用就是用來維護TCP連接,處理網絡IO,收發數據。

而 manager 管理進程,作用則是 fork 和管理 worker 和 task 進程。

worker 進程的作用是接收 reactor 線程傳遞的數據,并處理數據,返回處理結果給 reactor 線程。

task 進程的作用是處理一些相對耗時的任務,task 與 worker 進程是獨立的,不會影響 worker 進程處理客戶端的請求。

一、task 進程的應用場景:

1、相對耗時的郵件群發,比如某某活動,需要給100W用戶發送活動郵件。

2、推送某些大V的動態,比如某大V發了條新消息,粉絲需要及時獲取到該動態。

二、worker 與 task 的相互關系:

1、worker 進程中能過調用 task() 來投遞任務,task 進程中 通過 onTask 事件來響應投遞來的任務。

2、task 進程中 通過 直接返回 或 調用 finish() 來告訴 worker 進程任務處理完畢,worker 進程中 通過 onFinish 事件響應任務完成。

三、使用 task 的前題:

1、在 Server 中 配置 task_worker_num 數量。

2、設置 Server 的 onTask 和 onFinish 事件回調函數。

四、簡單的使用task進行累加和的計算例子

?php
$server = new swoole_server('0.0.0.0', 6666);
 
$server->set([
  'worker_num' => 2,
  'task_worker_num' => 16,
]);
 
$server->on('WorkerStart', function ($server, $worker_id) {
  //注意這里,我們通過taskworker來判斷是task進程還是worker進程
  //需要在worker進程中調用task(),不然會報出警告
  //這里會執行兩遍,因為我們設置了worker_num數為2
  if (!$server->taskworker) {
    echo '投遞任務開始...', PHP_EOL;
    //投遞32個累加計算任務給16個task進程
    for ($ix = 0; $ix  32; $ix++) {
      //注意這里的投遞是異步的
      $server->task([mt_rand(1, 100), mt_rand(1000, 9999)]);
    }
    echo '投遞任務結束...', PHP_EOL;
  }
});
 
//server服務必須要有onReceive回調
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
 
});
 
//注意,task進程完全是同步阻塞模式的
$server->on('Task', function ($server, $task_id, $src_worker_id, $data) {
  echo "task {$task_id} 進程正在工作...", PHP_EOL;
  $start = $data[0];
  $end = $data[1];
  $total = 0;
  for (; $start = $end; $start++) {
    $total += $start;
  }
  echo "task {$task_id} 進程完成工作...", PHP_EOL;
  return $total;
});
 
$server->on('Finish', function ($server, $task_id, $data) {
  echo "task {$task_id} 進程處理完成, 結果為 {$data}", PHP_EOL;
});
 
$server->start();

注意,我們通過調用 task() 往任務池中投遞任務,swoole 底層會輪詢的投遞任務到各個 task 進程。

當你投遞任務的數量超過 onTask 的處理速度,這會導致任務池被塞滿,進而導致 worker 進程發生阻塞,所以需合理設置 task_worker_num 數量和處理速度之間的關系。

當然,我們也可以人為的把任務投遞到指定的 task 進程。task() 函數的第二個參數可以指定要投遞的 task 進程ID,ID范圍為 0 到 (task_worker_num - 1)。

五、對任務進行切分,人為控制投遞到 task 進程

?php
$server = new swoole_server('0.0.0.0', 6666);
 
$server->set([
  'worker_num' => 1,
  'task_worker_num' => 10,
]);
 
$server->on('WorkerStart', function ($server, $worker_id) {
  //為了方便演示,把worker_num設置為1,這里只會執行一次
  if (!$server->taskworker) {
    //通過swoole_table共享內存,在不同進程中共享數據
    $server->result = new swoole_table(10240);
    //用于保存task進程完成數量
    $server->result->column('finish_nums', swoole_table::TYPE_INT);
    //用于保存最終計算結果
    $server->result->column('result', swoole_table::TYPE_INT);
    $server->result->create();
    //計算1000的累加和,并把計算任務分配到10個task進程上
    $num = 1000;
    $step = $num / $server->setting['task_worker_num'];
    for ($ix = 0; $ix  $server->setting['task_worker_num']; $ix++) {
      $start = $ix * $step;
      $server->task([$start, $start + $step], $ix);
    }
  }
});
 
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
 
});
 
//注意,task進程完全是同步阻塞模式的
$server->on('Task', function ($server, $task_id, $src_worker_id, $data) {
  echo "task {$task_id} 進程正在工作... 計算 {$data[0]} - {$data[1]} ", PHP_EOL;
  $start = ++$data[0];
  $end = $data[1];
  $total = 0;
  for (; $start = $end; $start++) {
    $total += $start;
  }
  echo "task {$task_id} 進程完成工作...", PHP_EOL;
  return $total;
});
 
$server->on('Finish', function ($server, $task_id, $data) {
  echo "task {$task_id} 進程處理完成, 結果為 {$data}", PHP_EOL;
  $server->result->incr('finish_nums', 'finish_nums');
  $server->result->set('result', ['result' => $data + $server->result->get('result', 'result')]);
 
  if ($server->result->get('finish_nums', 'finish_nums') == $server->setting['task_worker_num']) {
    echo "最終計算結果:{$server->result->get('result', 'result')}", PHP_EOL;
  }
});
 
$server->start();

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP網絡編程技巧總結》、《php socket用法總結》、《php面向對象程序設計入門教程》、《PHP數據結構與算法教程》及《php程序設計算法總結》

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

您可能感興趣的文章:
  • PHP Swoole異步讀取、寫入文件操作示例
  • PHP Swoole異步Redis客戶端實現方法示例
  • PHP Swoole異步MySQL客戶端實現方法示例
  • php基于 swoole 實現的異步處理任務功能示例
  • PHP swoole和redis異步任務實現方法分析
  • PHP擴展Swoole實現實時異步任務隊列示例
  • Swoole實現異步投遞task任務案例詳解
  • 詳解thinkphp5+swoole實現異步郵件群發(SMTP方式)
  • php異步多線程swoole用法實例
  • 如何用RabbitMQ和Swoole實現一個異步任務系統

標簽:南通 河南 黃山 通遼 隴南 平頂山 唐山 武漢

巨人網絡通訊聲明:本文標題《PHP swoole中使用task進程異步的處理耗時任務應用案例分析》,本文關鍵詞  PHP,swoole,中,使用,task,進程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP swoole中使用task進程異步的處理耗時任務應用案例分析》相關的同類信息!
  • 本頁收集關于PHP swoole中使用task進程異步的處理耗時任務應用案例分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    捆绑调教美女网站视频一区| 一区二区三区四区视频精品免费| 精品国产91洋老外米糕| 91免费版在线看| 国产亚洲成av人在线观看导航 | 欧美探花视频资源| 一区二区高清免费观看影视大全| a级高清视频欧美日韩| 欧美精品一区二区在线播放 | 欧美视频日韩视频在线观看| 精品一区二区精品| 26uuu亚洲| 粉嫩久久99精品久久久久久夜| 久久久久久久久97黄色工厂| 国产91对白在线观看九色| 国产日韩欧美精品综合| 成人美女视频在线看| 最好看的中文字幕久久| 欧美丝袜丝nylons| 国产综合色视频| 中文字幕一区二区三区在线播放 | 丁香婷婷综合网| 亚洲精品免费在线| 91精品欧美福利在线观看| 精品亚洲国内自在自线福利| 欧美激情综合五月色丁香| 91视频精品在这里| 奇米色一区二区| 国产精品免费av| 欧美裸体bbwbbwbbw| 国产精品羞羞答答xxdd| 一区二区三区中文字幕| 欧美不卡视频一区| 一本久久综合亚洲鲁鲁五月天| 蜜桃视频第一区免费观看| 成人免费在线播放视频| 精品黑人一区二区三区久久| 欧洲av在线精品| 成人午夜免费视频| 青青草伊人久久| 亚洲综合激情小说| 国产精品免费视频一区| 欧美精品一区二区在线观看| 777午夜精品视频在线播放| 成人动漫一区二区三区| 国内精品嫩模私拍在线| 午夜成人在线视频| 亚洲最快最全在线视频| 国产色91在线| 日韩亚洲欧美在线| 欧美性受极品xxxx喷水| 99久久综合国产精品| 国产成人午夜电影网| 免费成人在线观看| 三级亚洲高清视频| 日韩国产一二三区| 亚洲高清视频在线| 亚洲制服丝袜一区| 一区二区三区免费| 伊人开心综合网| 亚洲视频一区二区在线观看| 中文字幕欧美日本乱码一线二线| 精品久久人人做人人爽| 日韩亚洲欧美一区二区三区| 欧美电视剧在线观看完整版| 欧美日韩成人在线| 51精品久久久久久久蜜臀| 91精品国产高清一区二区三区| 欧美精品一二三| 欧美一区午夜视频在线观看 | 91天堂素人约啪| 96av麻豆蜜桃一区二区| 色婷婷亚洲精品| 欧美日韩在线观看一区二区 | 日本在线不卡视频| 日韩和的一区二区| 青青草原综合久久大伊人精品 | 国产一区二区三区四区五区入口| 极品瑜伽女神91| 国产成人日日夜夜| 色综合久久久久网| 91精品国产高清一区二区三区| 精品国内片67194| 国产偷v国产偷v亚洲高清| 国产精品美女一区二区在线观看| 亚洲免费观看在线观看| 日韩av午夜在线观看| 国产一区二区不卡| 91黄色免费版| 精品成人一区二区三区四区| 国产精品久久久久久亚洲毛片 | 婷婷久久综合九色国产成人| 国内精品国产成人国产三级粉色| 国产高清亚洲一区| 欧美在线观看一区二区| 精品国产伦一区二区三区观看体验| 26uuu精品一区二区在线观看| 亚洲国产岛国毛片在线| 视频一区二区不卡| 波多野结衣视频一区| 欧美一区二区三区性视频| 国产精品免费久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产成人午夜精品影院观看视频 | wwwwxxxxx欧美| 一区二区三区av电影| 激情综合色播激情啊| 日本丰满少妇一区二区三区| 精品99一区二区| 偷拍一区二区三区四区| av电影在线观看一区| 精品国产免费一区二区三区四区| 亚洲精品视频自拍| 成人不卡免费av| 久久免费偷拍视频| 轻轻草成人在线| 欧洲在线/亚洲| 最新成人av在线| 国产成人欧美日韩在线电影| 日韩一区二区三区免费观看| 亚洲综合在线观看视频| 不卡av免费在线观看| 久久综合成人精品亚洲另类欧美 | 91亚洲精品一区二区乱码| 91精品国产日韩91久久久久久| 亚洲欧美偷拍卡通变态| 成人免费看的视频| 日本一区二区三区电影| 精品综合久久久久久8888| 91精品国产综合久久久久久久久久 | 久久美女高清视频| 免费xxxx性欧美18vr| 亚洲日穴在线视频| 国产成人av资源| 26uuu久久天堂性欧美| 激情综合色丁香一区二区| 欧美一区二区三区免费大片| 五月婷婷激情综合| 欧美日韩国产一级二级| 亚洲国产美女搞黄色| 欧美性高清videossexo| 亚洲福利视频三区| 777久久久精品| 美腿丝袜一区二区三区| 日韩视频免费直播| 久久99在线观看| 欧美国产激情一区二区三区蜜月| 不卡的av电影在线观看| 亚洲青青青在线视频| 欧美视频日韩视频| 美女视频一区二区| 久久欧美一区二区| bt欧美亚洲午夜电影天堂| ㊣最新国产の精品bt伙计久久| 91影院在线观看| 无码av免费一区二区三区试看| 91精品国产高清一区二区三区| 久久成人精品无人区| 亚洲国产激情av| 日本韩国精品在线| 久久爱另类一区二区小说| 国产精品私人自拍| 在线免费观看日本一区| 蜜桃视频一区二区三区 | 久久精品夜色噜噜亚洲a∨| 高清在线观看日韩| 亚洲国产一区视频| 久久亚洲精华国产精华液| 91在线视频免费观看| 全部av―极品视觉盛宴亚洲| 亚洲国产高清aⅴ视频| 欧美三级日韩在线| 久久精品视频一区二区| 99精品欧美一区| 日韩精品91亚洲二区在线观看| 亚洲国产成人一区二区三区| 欧美日韩五月天| 高清日韩电视剧大全免费| 亚洲成人综合视频| 欧美激情一区在线| 日韩三级高清在线| 91久久精品网| 国产成人精品免费一区二区| 亚洲成人免费影院| 国产精品天天摸av网| 日韩欧美国产系列| 欧美在线你懂得| av亚洲精华国产精华精华| 久久99国产精品久久99果冻传媒| 亚洲激情校园春色| 国产精品妹子av| 亚洲精品一区二区精华| 4438亚洲最大| 91黄色在线观看| 成人av资源站| 国产精品亚洲午夜一区二区三区| 日韩精品欧美精品| 亚洲v日本v欧美v久久精品| 国产精品精品国产色婷婷| 久久久久高清精品|