欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

PHP的pcntl多进程

发布时间:2024/9/20 php 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PHP的pcntl多进程 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

来源:http://www.cnblogs.com/yjf512/p/3217615.html

PHP使用PCNTL系列的函数也能做到多进程处理一个事务。比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了。。。所以应该使用pcntl函数了。

假设我想要启动20个进程,将1-80w的数据分成20份来做,主进程等待所有子进程都结束了才退出:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 $max = 800000; $workers = 20; $pids = array(); for($i = 0; $i < $workers; $i++){     $pids[$i] = pcntl_fork();     switch ($pids[$i]) {         case -1:             echo "fork error : {$i} \r\n";             exit;         case 0:             $param = array(                 'lastid' => $max / $workers * $i,                 'maxid' => $max / $workers * ($i+1),             );             $this->executeWorker($input, $output, $param);             exit;         default:             break;     } } foreach ($pids as $i => $pid) {     if($pid) {         pcntl_waitpid($pid, $status);     } }

这里当pcntl_fork出来以后,会返回一个pid值,这个pid在子进程中看是0,在父进程中看是子进程的pid(>0),如果pid为-1说明fork出错了。

使用一个$pids数组就可以让主进程等候所有进程完结之后再结束了


总结

以上是生活随笔为你收集整理的PHP的pcntl多进程的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。