PHP进程调度策略介绍.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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();

/**

文档评论(0)

183****9196 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档