pcntl_fork () 函数的使用

pcntl_fork() 用于开启子进程,windows系统无法使用;可以应用的场景如单机模拟并发的环境等等;如接口压力测试(秒杀功能),数据库写死锁测试,curl方式爬站提高效率,甚至ddos和cc;子进程开启的并发数量视机器性能,以下代码在虚拟机中测试,开启1000个子进程时,时间为分段并且在打印输出时出现卡顿;
$pid = pcntl_fork(); // 相当于同时开启了一个主进程和一个子进程;返回值-1时表示开启进程失败,0表示子进程开启成功,>0表示主进程开启成功;在实际应用中主进程什么都不用做,仅仅需要在并发的子进程中实现业务逻辑
直接上代码,实现开启并发子进程

<?php
$i=0;
while($i!=10){
 $pid = pcntl_fork();
 //echo $pid."-parent-".time()."-".$i++.PHP_EOL;
 $i++;
 //sleep(1);
 if ($pid == 0) {
  //echo "子进程".PHP_EOL;
  echo $pid."-children-".time()."-".$i++.PHP_EOL;
  sleep(10);
  echo 1;
  return;
 }
}
?>

以上代码输出为,由子进程输出的
0-children-1553879286-2
0-children-1553879286-3
0-children-1553879286-4
0-children-1553879286-1
0-children-1553879286-9
0-children-1553879286-10
0-children-1553879286-6
0-children-1553879286-7
0-children-1553879286-8
0-children-1553879286-5
等待10秒后,可以在控制台中看见打印了10个1
已经确定在主进程结束后子进程仍然在运行,PHP实现异步的队列处理耗时任务可以基于pcntl_fork()函数实现;
子进程中的sleep(10)对主进程没有任何影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值