成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:193日期: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ì)列。

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

一、通過(guò)同步阻塞管道進(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'; }});

二、通過(guò) swoole_event_add 將管道設(shè)為異步,來(lái)進(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ì)列來(lái)完成進(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)程讀出來(lái)。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)程可以通過(guò) signal 監(jiān)聽信號(hào),和 alarm 設(shè)置定時(shí)器。

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

也可以設(shè)置定時(shí)器,通過(guò) 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)程,不然將一直無(wú)法正常退出 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)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品天美传媒| 免费人成在线不卡| 日av在线不卡| 狠狠色伊人亚洲综合网站色| 欧美va亚洲va香蕉在线| 九九视频精品免费| 欧美中文字幕亚洲一区二区va在线 | 国产一区在线观看麻豆| 色婷婷久久综合| 亚洲成人tv网| 国产精品免费看| 一区二区不卡在线播放| 亚洲巨乳在线| 亚洲欧洲精品成人久久奇米网 | 久久一区精品| 三级亚洲高清视频| 久久综合导航| 亚洲超碰精品一区二区| 久久精品二区| 欧美aaaaaa午夜精品| 在线精品视频一区二区| 日日摸夜夜添夜夜添亚洲女人| 久久精品日产第一区二区三区| 亚洲网友自拍偷拍| 国产乱码精品| 亚洲伊人色欲综合网| 午夜在线精品| 亚洲va韩国va欧美va精品| 亚洲一区二区三区精品动漫| 亚洲午夜一区二区| 久久久国产精品一区二区中文| 亚洲大型综合色站| 看欧美日韩国产| 日本aⅴ免费视频一区二区三区 | 国产精品国产三级国产a| 国产精品二区二区三区| 日本一二三不卡| 国内自拍一区| 亚洲日本va在线观看| 亚洲一区在线直播| 视频精品一区二区| 91国内精品野花午夜精品| 久久精品久久久精品美女| 欧美精品亚洲二区| 成人app在线| 国产精品美日韩| 在线视频精品| 青青草国产精品亚洲专区无| 91精品国产综合久久久蜜臀粉嫩| 成人h动漫精品一区二| 日本一区二区免费在线观看视频 | 亚洲一区二区三区免费视频| 久久久久久一区| 久久97超碰国产精品超碰| 日韩网站在线看片你懂的| 91社区在线播放| 亚洲欧美另类小说| 午夜一级久久| 国产精品亚洲第一区在线暖暖韩国 | 极品少妇xxxx精品少妇偷拍| 欧美一区二区黄色| 欧美二区在线| 成人免费小视频| 久久亚洲欧洲| 国产综合久久久久久久久久久久| 欧美一区午夜视频在线观看 | 奇米精品一区二区三区在线观看 | 日韩欧美高清一区| 含羞草久久爱69一区| 亚洲国产欧美日韩另类综合 | 一区二区理论电影在线观看| 欧美调教femdomvk| 93久久精品日日躁夜夜躁欧美| 亚洲人成人一区二区在线观看| 色婷婷精品大在线视频| 国产成人在线视频网址| 国产精品久久午夜夜伦鲁鲁| 久久婷婷丁香| 丁香网亚洲国际| 最新日韩av在线| 老妇喷水一区二区三区| 国产aⅴ精品一区二区三区色成熟| 国产欧美一区二区精品仙草咪| 久久男女视频| 国产成人免费高清| 亚洲欧洲精品天堂一级| 色哟哟精品一区| 成人激情开心网| 一区二区三区在线观看网站| 色哟哟国产精品免费观看| 成人一二三区视频| 亚洲精品国产一区二区三区四区在线| 色94色欧美sute亚洲13| 国产高清久久久久| 欧美激情一区二区三区在线| 久久久人人人| av中文字幕在线不卡| 亚洲r级在线视频| 久久综合九色综合97婷婷女人| 国产日韩精品一区观看| 国产成人在线观看| 一区二区三区在线免费| 7777精品伊人久久久大香线蕉完整版| 国产一区二区在线观看免费播放| 亚洲一二三四区不卡| 欧美tk—视频vk| 免费视频一区| 大陆成人av片| 偷拍日韩校园综合在线| 久久久久久久久久美女| 国产午夜精品一区二区三区欧美| 国产精品18久久久久久久久久久久| 国产欧美一区二区三区在线看蜜臀 | 国产亚洲精品久久久久婷婷瑜伽| 激情综合色丁香一区二区| 久久理论电影网| jvid福利写真一区二区三区| 亚洲aaa精品| 亚洲精品在线免费播放| 久久不射2019中文字幕| 成人激情免费电影网址| 亚洲国产欧美日韩另类综合| 精品视频资源站| 国内一区二区三区| 九九久久精品视频 | 伦理电影国产精品| 国产精品久久久久久久久搜平片 | 91麻豆高清视频| 日本免费在线视频不卡一不卡二| 久久久久久久av麻豆果冻| 久久久久久一区二区| 色综合色狠狠天天综合色| 日韩成人免费电影| 中文字幕第一页久久| 欧美日韩午夜在线| 在线欧美一区| 国产成人8x视频一区二区 | 欧美日韩黄色影视| 亚洲精品乱码| 成人免费毛片高清视频| 亚洲va天堂va国产va久| 久久美女高清视频| 欧美色综合影院| 99精品免费| 91蝌蚪porny成人天涯| 美洲天堂一区二卡三卡四卡视频| 久久精品在这里| 欧美一区二区在线不卡| 久久久精彩视频| 欧美日韩综合久久| 成人蜜臀av电影| 免费在线看一区| 国产精品国产三级国产aⅴ入口| 在线不卡免费欧美| 久久只有精品| 亚洲神马久久| 99精品视频一区| 久久97超碰国产精品超碰| 亚洲观看高清完整版在线观看| 国产精品网站导航| 日韩一级二级三级| 欧美色涩在线第一页| 香蕉久久夜色精品| 伊人狠狠色j香婷婷综合| 国产传媒欧美日韩成人| 日本aⅴ亚洲精品中文乱码| 亚洲免费观看在线视频| 国产亚洲欧美日韩俺去了| 7777精品伊人久久久大香线蕉的 | 黄色日韩三级电影| 日日夜夜一区二区| 一区二区三区日韩| 国产精品国产三级国产普通话蜜臀| 精品精品欲导航| 91精品视频网| 欧美午夜不卡视频| 色综合久久99| 日本久久一区二区三区| 久久精品毛片| 亚洲一区二区免费看| 99国产精品久久久久老师| 亚洲婷婷免费| 欧美国产精品| 99精品一区二区三区| 国产一区二区三区高清播放| 麻豆91在线播放免费| 日韩电影在线观看一区| 亚洲成a人v欧美综合天堂| 久久久国产综合精品女国产盗摄| 欧美一区二区三区日韩| 337p亚洲精品色噜噜噜| 欧美日韩视频第一区| 欧美日韩日日摸| 欧美日韩国产一区| 欧美日韩免费观看一区三区| 91成人在线免费观看| 欧美主播一区二区三区| 欧美视频你懂的| 日本乱码高清不卡字幕| 久久久久久亚洲精品杨幂换脸 |