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,如需转载请自行联系原作者

相关文章
|
Unix API PHP
PHP如何实现多进程并发?底层原理是什么?
PHP如何实现多进程并发?底层原理是什么?
153 0
|
网络协议 PHP
php实现多进程socket服务器class
php实现多进程socket服务器class
102 0
php实现多进程socket服务器class
|
PHP Windows
php windows多进程,php windows创建多进程,
php windows多进程,php windows创建多进程,
521 0
|
应用服务中间件 Linux PHP
php惊群效应,php多进程共享一个套接字的问题,workerman多进程共享socket
php惊群效应,php多进程共享一个套接字的问题,workerman多进程共享socket
120 0
|
Shell PHP 机器学习/深度学习
PHP CLI模式下的多进程应用
作者: Laruence(   ) 本文地址: http://www.laruence.com/2009/06/11/930.html 转载请注明出处 PHP在很多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径.
1573 0
|
PHP Windows 索引
优雅的玩PHP多进程
proc_open (PHP 4 >= 4.3.0, PHP 5, PHP 7) proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。 说明 ¶ resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string$cwd [, array $env [, array $other_options ]]] ) 类似 popen() 函数, 但是 proc_open() 提供了更加强大的控制程序执行的能力。
1456 0
|
PHP Go 数据库
|
PHP Apache
php 在mac上为php添加pcntl扩展
jnfjfjf 1.查看当前PHP版本 $ php -v 2.下载相同版本的php包并解压(路径随意,之后要删除) $ curl -O http://us.php.NET/distributions/php-5.5.30.tar.gz $ tar -xzvf php-5.5.30.tar.gz  3.进入pcntl目录编译生成共享库.so(shared object,用于动态连接的,和dll差不多)。
1733 0