日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP swoole的process模塊創建和使用子進程操作示例

瀏覽:229日期:2022-09-11 09:44:38

本文實例講述了PHP swoole的process模塊創建和使用子進程操作。分享給大家供大家參考,具體如下:

swoole中為我們提供了一個進程管理模塊 Process,替換PHP的 pcntl 擴展,方便我們創建進程,管理進程,和進程間的通信。

swoole提供了2種進程間的通信:

1、基于 unix socket 的管道 pipe。

2、基于 sysvmsg 的消息隊列。

我們可以通過 new swoole_process() 快速的創建一個進程,默認會創建一個 SOCK_DGRAM 類型的管道,用于進程間的通信,當然可以設置成其他類型,也可以不創建。

一、通過同步阻塞管道進行進程間通信

<?php$worker_process_nums = 5;$worker_process = []; for ($i = 0; $i < $worker_process_nums; $i++) { //創建子進程 //默認為每個子進程創建一個管道,如果不想創建設置$pipe_type參數為false //注意管道默認是同步阻塞,半雙工,如果讀取不到數據就會阻塞 $worker = new swoole_process(function (swoole_process $worker) { //注意,如果主進程中不寫數據write(),那么子進程這里read()就會阻塞 $task = json_decode($worker->read(), true); //進行計算任務 $tmp = 0; for ($i = $task[’start’]; $i < $task[’end’]; $i++) { $tmp += $i; } echo ’子進程 PID : ’, $worker->pid, ’ 計算 ’, $task[’start’], ’ - ’, $task[’end’], ’ 結果 : ’, $tmp, PHP_EOL; //往管道中寫入計算的結果 $worker->write($tmp); //子進程退出 $worker->exit(); }); //保存子進程 $worker_process[$i] = $worker; //啟動子進程 $worker->start();} //往每個子進程管道中投遞任務for ($i = 0; $i < $worker_process_nums; $i++) { $worker_process[$i]->write(json_encode([ ’start’ => mt_rand(1, 10), ’end’ => mt_rand(50, 100), ]));} //父進程監聽子進程退出信號,回收子進程,防止出現僵尸進程swoole_process::signal(SIGCHLD, function ($sig) { //必須為false,非阻塞模式 while ($ret = swoole_process::wait(false)) { echo '子進程 PID : {$ret[’pid’]} 退出n'; }});

二、通過 swoole_event_add 將管道設為異步,來進行通信

<?php$worker_process_nums = 5;$worker_process = []; for ($i = 0; $i < $worker_process_nums; $i++) { $worker = new swoole_process(function ($worker) { //在子進程中給管道添加事件監聽 //底層會自動將該管道設置為非阻塞模式 //參數二,是可讀事件回調函數,表示管道可以讀了 swoole_event_add($worker->pipe, function ($pipe) use ($worker) { $task = json_decode($worker->read(), true); $tmp = 0; for ($i = $task[’start’]; $i < $task[’end’]; $i++) {$tmp += $i; } echo '子進程 : {$worker->pid} 計算 {$task[’start’]} - {$task[’end’]} n'; //子進程把計算的結果,寫入管道 $worker->write($tmp); //注意,swoole_event_add與swoole_event_del要成對使用 swoole_event_del($worker->pipe); //退出子進程 $worker->exit(); }); }); $worker_process[$i] = $worker; //啟動子進程 $worker->start();} for ($i = 0; $i < $worker_process_nums; $i++) { $worker = $worker_process[$i]; $worker->write(json_encode([ ’start’ => mt_rand(1, 10), ’end’ => mt_rand(50, 100), ])); //主進程中,監聽子進程管道事件 swoole_event_add($worker->pipe, function ($pipe) use ($worker) { $result = $worker->read(); echo '子進程 : {$worker->pid} 計算結果 {$result} n'; swoole_event_del($worker->pipe); });} //父進程監聽子進程退出信號,回收子進程,防止出現僵尸進程swoole_process::signal(SIGCHLD, function ($sig) { //必須為false,非阻塞模式 while ($ret = swoole_process::wait(false)) { echo '子進程 PID : {$ret[’pid’]} 退出n'; }});

三、使用消息隊列來完成進程間通信

<?php$worker_process_nums = 5;$worker_process = []; for ($i = 0; $i < $worker_process_nums; $i++) { //注意,這里將參數$pipe_type設為false,表示不創建管道 $worker = new swoole_process(function ($worker) { $task = json_decode($worker->pop(), true); $tmp = 0; for ($i = $task[’start’]; $i < $task[’end’]; $i++) { $tmp += $i; } echo '子進程 : {$worker->pid} 計算 {$task[’start’]} - {$task[’end’]} n'; $worker->push($tmp); $worker->exit(); }, false, false); //使用消息隊列,作為進程間的通信 //注意,消息隊列是共享的 $worker->useQueue(); $worker_process[$i] = $worker; //啟動子進程 $worker->start();} for ($i = 0; $i < $worker_process_nums; $i++) { //只需用一個子進程發送消息即可,因為消息隊列是共享的 $worker_process[0]->push(json_encode([ ’start’ => mt_rand(1, 10), ’end’ => mt_rand(50, 100), ]));} //注意,這里要暫停,防止加入隊列的任務,立刻被主進程讀出來。sleep(1); for ($i = 0; $i < $worker_process_nums; $i++) { $result = $worker_process[0]->pop(); echo '計算結果 : {$result} n';} //父進程監聽子進程退出信號,回收子進程,防止出現僵尸進程swoole_process::signal(SIGCHLD, function ($sig) { //必須為false,非阻塞模式 while ($ret = swoole_process::wait(false)) { echo '子進程 PID : {$ret[’pid’]} 退出n'; }});

四、進程可以通過 signal 監聽信號,和 alarm 設置定時器。

我們可以在父進程上設置監聽信號,當子進程退出時,重新掛起子進程。

也可以設置定時器,通過 swoole_process::kill($pid, 0); 定時檢測進程是否存活。

<?php//每隔1秒觸發SIGALAM信號//注意,alarm不能和Timer同時使用swoole_process::alarm(1000 * 1000, 0); swoole_process::signal(SIGALRM, function ($signo) { static $cnt = 0; $cnt++; echo '時鐘定時信號n'; if ($cnt > 10) { //清除定時器 swoole_process::alarm(-1); }}); swoole_process::signal(SIGINT, function ($signo) { echo '我被ctrl+c了n'; //退出主進程,不然將一直無法正常退出 exit(0);});

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

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

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕人成乱码在线观看| 日韩影院二区| 日韩激情一区二区| 国产欧美一区| 精品一区二区三区视频在线播放| 亚洲天堂资源| 国产伦精品一区二区三区在线播放| 午夜欧美精品| 蜜桃伊人久久| 国产欧美日韩一区二区三区四区| 久久99影视| 久久美女性网| 亚洲字幕久久| 狠狠久久伊人| 99久久精品国产亚洲精品| 国产精品美女| 国产精品s色| 国内精品福利| 国产亚洲一区二区三区不卡| 亚洲成av在线| 一区二区精品| 国产精品久久久久久久免费观看 | 午夜在线视频观看日韩17c| 日韩不卡免费视频| 亚洲精品永久免费视频| 久热re这里精品视频在线6| 国产精品第一| 午夜免费一区| 欧美日韩一视频区二区| 秋霞国产精品| 欧美日韩一区二区三区不卡视频| 久久久一二三| 国产精品www994| 夜久久久久久| 国产成人精品999在线观看| 日韩精品一区第一页| 蜜桃精品视频| 国产精品毛片在线看| 国产成人精品一区二区三区免费| 亚洲综合中文| 人在线成免费视频| 日本色综合中文字幕| 国产精品99免费看| 麻豆精品av| 亚洲免费观看高清完整版在线观| 香蕉视频亚洲一级| 青青草伊人久久| 91精品1区| 不卡专区在线| 欧美精品三级在线| 午夜久久免费观看| 国产91欧美| 亚洲狼人精品一区二区三区| 日韩精品欧美激情一区二区| 国产精品一区二区精品| 麻豆成人在线| 久久久精品午夜少妇| 麻豆视频一区| 欧美在线首页| 丝袜美腿亚洲一区二区图片| 久久蜜桃资源一区二区老牛| 久久av网站| 欧美自拍一区| 综合激情网...| 午夜国产精品视频免费体验区| 国产成人精品亚洲线观看 | 五月天久久久| 日韩电影二区| 国产一区不卡| 麻豆国产精品视频| 欧美日韩夜夜| 日本中文字幕一区二区| 一区在线免费观看| 天堂√中文最新版在线| 91精品在线免费视频| 亚洲免费播放| 久久三级福利| 日韩欧美午夜| 国产精品成人自拍| 日日摸夜夜添夜夜添国产精品| 亚洲精品一二三区区别| 丝袜美腿诱惑一区二区三区| 精品一区视频| 国产激情久久| 国产亚洲字幕| 国产精品一区亚洲| 日韩手机在线| 日韩激情精品| 婷婷综合国产| 亚洲精品四区| 综合激情视频| 日本成人在线网站| 日韩一区二区三区高清在线观看| 欧美日韩视频一区二区三区| 亚洲成人国产| 久久久亚洲一区| 亚洲午夜电影| 精品一区三区| 亚洲激情av| 蜜臀va亚洲va欧美va天堂 | 国产精品视频首页| 久久黄色影视| 国产精品中文字幕制服诱惑| 欧美经典一区| 国产欧美日韩亚洲一区二区三区| 男女精品网站| 男人天堂欧美日韩| 亚洲一区导航| 亚洲久久在线| 日韩激情中文字幕| 国产欧美视频在线| 老司机免费视频一区二区| 麻豆国产欧美一区二区三区| 精品亚洲a∨一区二区三区18| 精品国产亚洲一区二区在线观看| 国产激情在线播放| 欧美日韩精品免费观看视欧美高清免费大片 | 69堂精品视频在线播放| 国产极品模特精品一二| 老鸭窝一区二区久久精品| 国产66精品| 伊人久久大香线蕉av不卡| 午夜欧美精品| 日韩精品亚洲专区| 国产精品4hu.www| av在线最新| 不卡视频在线| 日韩有吗在线观看| 另类小说一区二区三区| 欧美日韩免费观看视频| 国产亚洲一区在线| 日本aⅴ精品一区二区三区 | 亚洲尤物av| 久久av中文| 婷婷成人在线| 最新亚洲国产| 老鸭窝一区二区久久精品| 99久久激情| 亚洲视频二区| 精品午夜久久| 亚洲精品一二三区区别| 日韩精品亚洲一区二区三区免费| 精品99久久| 先锋亚洲精品| 国产精品成人一区二区网站软件| 福利一区视频| 亚洲女人av| 久久久久伊人| 在线一区免费观看| 欧美视频一区| 日本一区二区高清不卡| 国精品一区二区| 日韩成人av影视| 日韩欧美午夜| 日本成人在线一区| 蜜桃av在线播放| 亚洲91在线| 91tv亚洲精品香蕉国产一区| 日韩av字幕| 久久精品91| 亚洲精品免费观看| 国产高清不卡| 欧美在线黄色| 欧美日韩视频| 国产精品xx| 日韩高清在线不卡| 国产成人精品亚洲日本在线观看| 亚洲1区在线观看| 88xx成人免费观看视频库| 69精品国产久热在线观看| 蜜臀久久99精品久久一区二区 | 日本不卡中文字幕| 久久国产免费| 欧美精品中文字幕亚洲专区| 欧美搞黄网站| 成人午夜毛片| 奇米狠狠一区二区三区| 99精品电影| 欧美极品一区二区三区| 亚洲综合中文| 欧美丝袜一区| 精品亚洲精品| 欧美久久亚洲| 亚洲在线成人| 日韩国产欧美| 99精品美女| 国产在线日韩| 麻豆一区二区三区| 最新日韩av| 欧美成人精品三级网站| 欧美亚洲福利| 亚洲一区观看| 日本不卡免费高清视频在线| 日韩福利视频导航| 中文日韩欧美| 色一区二区三区| 欧美精品97| 日韩高清一级| 久久午夜精品一区二区| 欧美中文一区二区|