PHP提供了一个Pcntl扩展。Pcntl基于Linux进程。Windows系统暂时没有这个扩展。它用于实现基本的多进程实现。这可用于处理非常耗时的任务,比如发送订阅邮件、短信、站内信等。参考链接:http://php.net/manual/zh/ref....http://php.net/manual/zh/ref....http://blog.csdn.net/huyanpin...http://rango.swoole.com/archi...https://www.lvtao.net/dev/php...示例代码:代码基于Laravel框架,建议使用该框架允许这部分代码。publicfunctionindex(Request$request){pcntl_signal(SIGCHLD,SIG_IGN);//如果父进程不关心子进程什么时候结束,内核会在子进程结束后进行回收。$最大值=8000;$工人=10;$pids=数组();for($i=0;$i<$workers;$i++){$pids[$i]=pcntl_fork();$pid=posix_getpid();switch($pids[$i]){case-1:echo"forkerror:{$i}\r\n";出口;情况0:$param=array('lastid'=>$max/$workers*$i,'maxid'=>$max/$workers*($i+1),);$this->doSomething($pid,$param);出口;默认值:中断;}}foreach($pidsas$i=>$pid){if($pid){//父进程会得到子进程号,所以这里是父进程执行的逻辑//如果没有需要阻塞进程,又想获取子进程的退出状态,可以将pcntl_wait($status)语句注释掉,或者写成:pcntl_wait($status,WNOHANG);//等待子进程被中断,防止子进程成为僵尸进程。//pcntl_waitpid($pid,$status);}}}//可以看到子进程正在处理什么数据publicfunctiondoSomething($filename,$param){for($i=$param['lastid'];$i<$param['maxid'];$i++){$path="./test/";如果(!is_dir($path)){mkdir($path,0777,true);}$内容=$我。'|';$文件=$路径。$文件名。“。TXT”;file_put_contents($file,$content,FILE_APPEND);}}更多阅读文档、进程和线程的建议,内容很多,需要阅读学习
