- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
PHP进程调度策略介绍
phper请了解进程调度策略,CPU时间片,进程控制【创建,销毁,回收,进程信号】与及进程运行流程和基本的进程组,信号中断原理,以及进程之间的关系。
进程的通信:
匿名管道,命名管道,消息队列,内存共享,socketpAIr请自行撸代码测试哦
进程的调度算法:
轮询,随机分发,计分板等策略或是搞个优先极或是队列,或是堆栈等基本的算法【自己去发挥哦】
进程池:
撸过tcp的话应该知道要能处理多个客户端,就得用IO复用技术【事件多路分发器】或是多进程以及多线程,每来一个客户端就fork一个进程或是线程,那样的话上下文切换成本特别高,所以咱们先创建好一组进程【进程池】,等客户端连接上来的时候,通过某种算法【我们用的轮询】来选择某个进程投递任务来干活,这样的话就不用创建又销毁来回折腾了,提升它的效率。
下面是PHP代码版本的实现
*CreatedbyPhpStorm.
*User:1655664358@QQ.com
*Date:2025/1/12
*Time:16:18
$flag=1;
classprocess
public$pid;
public$name;
public$file;
public$num;
classinstance
public$processIdx;
public$proc=[];
public$processNum;
functionsigHandler($sigNo)
global$flag;
$flag=0;
echo信号中断处理.PHP_EOL;
functionprocessPool(instance$instance,$num)
if(!$instance||$num==0){
fprintf(STDERR,%s,参数错误
return1;
$instance-processIdx=0;
$instance-processNum=$num;
pcntl_signal(SIGINT,sigHandler
pcntl_signal(SIGTERM,sigHandler
$process=newprocess();
for($i=1;$iproc[$i]=clone$process;
$instance-proc[$i]-file=$i;
$instance-proc[$i]-pid=pcntl_fork();
$instance-processIdx=$i;
if($instance-proc[$i]-pidproc[$i]-pid0){
//nothing
continue;
}else{
worker($instance);
master($instance);
$exitProcess=[];
while(1){
for($i=1;$iproc[$i]-pid,$status,WNOHANG);
if($status){
$exitProcess[]=$instance-proc[$i]-
fwrite(STDOUT,worker#.$instance-proc[$i]-pid.-.$status,30);
if(count($exitProcess)==$instance-processNum){
exit(0);
usleep(1000);
//简单的轮询算法自己可以用队列,随机,链表,栈链,二叉树啥的折腾
functionroundRobin($instance,$roll)
/**@varinstance$instance*/
return$instance-proc[$roll%$instance-processNum+1];
functionmaster($instance)
/**@varinstance$instance*/
fprintf(STDOUT,master进程%d\n,$instance-processIdx);
global$flag;
$roll=0;
while($flag){
pcntl_signal_dispatch();
/**
您可能关注的文档
最近下载
- 《混凝土结构加固设计规范》GB50367.pdf VIP
- 《精神疾病诊断与统计手册》DSM5.PDF VIP
- 2冷疗技术15课件讲解.pptx VIP
- 海姆立克急救法操作考核标准.doc VIP
- JJG 195-2019 连续累计自动衡器(皮带秤).pdf VIP
- 专项治理整改落实及长效机制建设情况报告().pdf VIP
- TD∕T 1087-2023 主体功能区优化完善技术指南.pdf
- (完整word版)数独题目100题(可打印).doc VIP
- 0604-会计专业国家技能人才培养工学一体化课程标准(试用).docx VIP
- 04.汉杂事秘辛.一卷.汉.阙名撰.明崇祯时期汲古阁刊本.pdf VIP
文档评论(0)