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

您的位置:首頁技術(shù)文章
文章詳情頁

PHP swoole的process模塊創(chuàng)建和使用子進(jìn)程操作示例

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

本文實(shí)例講述了PHP swoole的process模塊創(chuàng)建和使用子進(jìn)程操作。分享給大家供大家參考,具體如下:

swoole中為我們提供了一個(gè)進(jìn)程管理模塊 Process,替換PHP的 pcntl 擴(kuò)展,方便我們創(chuàng)建進(jìn)程,管理進(jìn)程,和進(jìn)程間的通信。

swoole提供了2種進(jìn)程間的通信:

1、基于 unix socket 的管道 pipe。

2、基于 sysvmsg 的消息隊(duì)列。

我們可以通過 new swoole_process() 快速的創(chuàng)建一個(gè)進(jìn)程,默認(rèn)會(huì)創(chuàng)建一個(gè) SOCK_DGRAM 類型的管道,用于進(jìn)程間的通信,當(dāng)然可以設(shè)置成其他類型,也可以不創(chuàng)建。

一、通過同步阻塞管道進(jìn)行進(jìn)程間通信

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

二、通過 swoole_event_add 將管道設(shè)為異步,來進(jìn)行通信

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

三、使用消息隊(duì)列來完成進(jìn)程間通信

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

四、進(jìn)程可以通過 signal 監(jiān)聽信號(hào),和 alarm 設(shè)置定時(shí)器。

我們可以在父進(jìn)程上設(shè)置監(jiān)聽信號(hào),當(dāng)子進(jìn)程退出時(shí),重新掛起子進(jìn)程。

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

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

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php socket用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》及《php程序設(shè)計(jì)算法總結(jié)》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美亚洲综合视频| 亚洲成人不卡| 一区三区视频| 亚洲成人精选| 午夜久久影院| 亚洲免费网址| 国产综合欧美| 在线亚洲免费| 最新亚洲国产| 国产欧美亚洲一区| 精品中文在线| 国产在线一区不卡| 日韩在线免费| 99综合视频| 日韩极品在线观看| 国产精品手机在线播放| 韩日一区二区| 久久久人人人| 亚洲黄色在线| 日本午夜精品视频在线观看| 久久成人高清| 电影91久久久| 国内精品99| 日韩制服丝袜先锋影音| 亚洲欧洲av| 精品午夜av| 国产精品97| 日韩一区二区三区高清在线观看 | 91精品国产自产精品男人的天堂| 国产精品第一| 日韩在线不卡| 亚洲免费播放| 欧美伊人影院| 久久久久久网| 日韩午夜av在线| 国产剧情一区二区在线观看| 91av亚洲| 日本一区二区中文字幕| 欧美韩日一区| 石原莉奈在线亚洲三区| 美女久久精品| 国产亚洲福利| 精品久久97| 亚洲免费成人| 久久不见久久见国语| 久久精品av| 日韩av电影一区| 中文字幕系列一区| 天堂va在线高清一区| 国产成人精品免费视| 久久最新视频| 日本一区二区免费高清| 老牛影视一区二区三区| 老司机免费视频一区二区| 亚洲精品2区| 国产欧美精品久久| 9久re热视频在线精品| 久久字幕精品一区| 夜久久久久久| 麻豆精品少妇| 只有精品亚洲| 亚洲www啪成人一区二区| 婷婷亚洲成人| 亚洲成人不卡| 欧美日韩1区| 日韩一区二区免费看| 高清日韩欧美| 日韩av不卡在线观看| 婷婷丁香综合| 精品国产欧美日韩| 日韩在线麻豆| 久久亚洲国产| 国产成人精品亚洲线观看| 亚洲精品系列| japanese国产精品| 国产第一亚洲| 国产伦精品一区二区三区视频 | 亚洲午夜久久| 成人啊v在线| 嫩草伊人久久精品少妇av杨幂| 亚洲在线国产日韩欧美| 免费福利视频一区二区三区| 国产精品欧美日韩一区| 最新国产精品久久久| 不卡av一区二区| 午夜精品成人av| 精品国产乱码久久久久久樱花| 亚洲精品美女91| 99在线观看免费视频精品观看| 国产福利片在线观看| 国产私拍福利精品视频二区| 久热综合在线亚洲精品| 国产一区亚洲| 日韩在线看片| av最新在线| 国产一区二区三区四区大秀 | 亚洲午夜久久久久久尤物| 国内精品伊人| 国产精品va视频| 日本视频中文字幕一区二区三区| 免费日本视频一区| 色88888久久久久久影院| 国产精品自拍区| 日韩高清不卡一区二区| 亚洲精品一级| 亚洲综合激情在线| 亚洲涩涩av| 亚洲有吗中文字幕| 蜜臀久久99精品久久久久久9| 日韩亚洲国产欧美| 日韩午夜av| 亚洲欧美日韩在线观看a三区| 婷婷激情图片久久| 欧美日韩在线网站| 久久麻豆精品| 在线视频观看日韩| 999国产精品视频| 日韩中文在线播放| 欧美 日韩 国产一区二区在线视频| 亚洲一级特黄| 红桃视频欧美| 天堂av在线一区| 亚洲欧美视频| 麻豆久久精品| 婷婷成人av| 国产精品亚洲综合久久| 欧美国产极品| 国内精品亚洲| 日韩美女一区二区三区在线观看| 九色porny丨国产首页在线| 99精品在线免费在线观看| 五月天久久777| 午夜国产一区二区| 国产农村妇女精品一区二区| 久久aⅴ国产紧身牛仔裤| 一区二区电影在线观看| 91亚洲无吗| 精品无人区麻豆乱码久久久| 亚洲天堂资源| 国产高清一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 五月激激激综合网色播| 国产欧美日韩一区二区三区在线| 欧美极品中文字幕| 久久久久久夜| 免费久久久久久久久| 免费观看在线综合色| 日韩有吗在线观看| 免费在线亚洲| 99久久亚洲精品| 视频一区中文字幕国产| 日本视频在线一区| 国产一区二区三区天码| 欧美中文一区二区| 亚洲精品乱码| 精品一区二区三区在线观看视频| 不卡一二三区| 美女国产精品| 国产精品蜜月aⅴ在线| а√天堂中文在线资源8| 黄色成人精品网站| 欧美日韩xxxx| 激情国产在线| 蜜臀a∨国产成人精品| 久久一区精品| 国产高清一区| 国产午夜久久av| 久久久久久久久丰满| 亚洲精品第一| 国产在线观看91一区二区三区| 在线国产一区| 国产日韩1区| 亚洲第一精品影视| 欧美一区免费| 亚洲第一精品影视| 88久久精品| 欧美jjzz| 欧美三区不卡| 美女毛片一区二区三区四区 | 免费国产自线拍一欧美视频| 国产精品二区影院| 午夜久久99| 精品理论电影在线| 首页国产欧美日韩丝袜| jizzjizz中国精品麻豆| 亚洲欧美在线综合| 一区二区三区四区日本视频| 亚洲毛片视频| 电影天堂国产精品| 欧美日一区二区在线观看| 欧美成人午夜| 国产美女精品视频免费播放软件| 精品一区亚洲| 精品国产午夜| 午夜久久av | 久久午夜影院| 亚洲精品美女| 国产真实久久| 精品国产亚洲一区二区在线观看| 视频在线观看一区二区三区|