PHP的Pcntl多进程扩展的用法介绍

PHP的Pcntl多进程扩展的用法介绍

内容导读

收集整理的这篇技术教程文章主要介绍了PHP的Pcntl多进程扩展的用法介绍,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1560字,纯文字阅读大概需要3分钟

内容图文

本篇文章给大家带来的内容是关于PHP的Pcntl多进程扩展的用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

PHP提供了一个Pcntl扩展,Pcntl基于Linux的进程,Windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。

示例代码:

代码是基于Laravel 框架的,建议使用此框架来允许这部分代码。

public function index(Request $request)

{



pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。




$max = 8000;



$workers = 10;







$pids = array();



for($i = 0; $i < $workers; $i++){





$pids[$i] = pcntl_fork();





$pid = posix_getpid();





switch ($pids[$i]) {







case -1:









echo "fork error : {$i} rn";









exit;







case 0:









$param = array(











'lastid' => $max / $workers * $i,











'maxid' => $max / $workers * ($i+1),









);









$this->doSomething($pid, $param);









exit;







default:









break;





}



}







foreach ($pids as $i => $pid) {





if($pid) {







//父进程会得到子进程号,所以这里是父进程执行的逻辑








//如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:








pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。







//pcntl_waitpid($pid, $status);





}



}

}// 可以看到那个子进程在处理哪些数据

public function doSomething($filename, $param)

{



for ($i = $param['lastid']; $i < $param['maxid']; $i++) {





$path = "./test/";





if (!is_dir($path)){







mkdir($path, 0777, true);





}





$content = $i . '|';





$file = $path . $filename . ".txt";





file_put_contents($file, $content, FILE_APPEND);



}

}

更多建议读文档,进程和线程,还有很多内容的,需要读书去学习了

以上就是PHP的Pcntl多进程扩展的用法介绍的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP的Pcntl多进程扩展的用法介绍全部内容,希望文章能够帮你解决PHP的Pcntl多进程扩展的用法介绍所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com