PHP的pcntl多进程

简介:

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数组就可以让主进程等候所有进程完结之后再结束了








本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3217615.html,如需转载请自行联系原作者

相关文章
|
1月前
|
PHP
PHP的pcntl多进程用法实例
PHP使用PCNTL系列的函数也能做到多进程处理一个事务。
37 12
|
PHP
PHP swoole 监听端口进程
PHP swoole 监听端口进程
109 0
|
PHP
PHP:php-fpm进程数控制配置
PHP:php-fpm进程数控制配置
123 0
|
Unix API PHP
PHP如何实现多进程并发?底层原理是什么?
PHP如何实现多进程并发?底层原理是什么?
199 0
PHP进程池的数量是如何配置的?底层原理是什么?
PHP进程池的数量是如何配置的?底层原理是什么?
177 0
PHP进程池是干什么的?底层原理是什么?
PHP进程池是干什么的?底层原理是什么?
154 0
|
消息中间件 Linux PHP
php进程通信-消息队列(2)
php进程通信-消息队列
116 0
php进程通信-消息队列(2)
|
消息中间件 Linux PHP
php进程通信-消息队列(1)
php进程通信-消息队列
126 0
php进程通信-消息队列(1)
|
Linux PHP
linux 批量 kill php 进程
linux 批量 kill php 进程