PHP 多进程示例
PHP多进程示例
说明:读取库中10万条记录,对其进行修改,测试结果对比,单进程修改完花费40秒左右, 创建了4个进程同步修改花费大概10秒左右。
代码示例
$processNum = 4; $timeStart = time(); $mysqli = new mysqli('127.0.0.1' , 'root' , 'root' , 'test'); $result = $mysqli->query('select * from send_msg where status = 2'); $child = []; while($row = $result->fetch_array(MYSQLI_ASSOC)){ //这里讲返回的结果对4进行取模,存入4个数组,然后4个进程分别读取不同的数据进行处理 $child[$row['id']%$processNum][] = $row['id']; } $mainPid = posix_getpid(); echo "主进程:".$mainPid.PHP_EOL; for($i=0;$i<$processNum;$i++){ $pid = pcntl_fork(); if($pid == 0){ $content = $child[$i]; $childStart = time(); $mysqli = new mysqli('127.0.0.1' , 'root' , 'root' , 'test'); foreach($content as $id){ $mysqli->query('update send_msg set status=1 where id='.$id); } $childEnd = time(); $childDiff = $childEnd-$childStart; echo "#".posix_getpid()."执行完毕,用时:".$childDiff."秒".PHP_EOL; exit(); //子进程执行完后必须退出,否则会循环的创建进程... } } //这里挂起主进程,等待子进程全部退出后再退出主进程 while($processNum>0){ if(($pid = pcntl_wait($status)) > 0){ $processNum--; echo "#".$pid."退出".PHP_EOL; } } $timeEnd = time(); $diff = $timeEnd-$timeStart; echo '共计用时:'.$diff.'秒';
执行结果:
学习一下
学习完毕,打卡
多进程, yield协程需要好好学习, 感谢楼主分享~
不论,什么语言在多进程或者多线程下(只读不写)读还好,一旦涉及写就复杂了