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

目录
相关文章
|
15天前
|
PHP
PHP的pcntl多进程用法实例
PHP使用PCNTL系列的函数也能做到多进程处理一个事务。
|
14天前
|
消息中间件 缓存 监控
在PHP中,实现多线程
在PHP中,实现多线程
33 6
|
网络协议 应用服务中间件 PHP
CGI、FastCGI、PHP-FPM是干什么的?它们的区别是什么?底层原理是什么?
CGI、FastCGI、PHP-FPM是干什么的?它们的区别是什么?底层原理是什么?
113 0
|
PHP 调度
浅谈 实现php多线程
浅谈 实现php多线程
|
缓存 网络协议 JavaScript
php-fpm应用与php-swoole应用进行通信
把Workerman作为一个可以向浏览器推送的通道,仅仅在需要向浏览器推送数据时才调用Workerman接口完成推送。业务逻辑全部在ThinkPHP中完成。
133 0
|
Ubuntu PHP
php管道通信
php管道通信
165 0
|
安全 PHP
PHP多线程
1、扩展下载链接:https://windows.php.net/downloads/pecl/releases/pthreads 2、php扩展安装:pthreads a)注意事项: i.Php必须是线程安全的版本(TS),可以在phpinfo中查看
uiz
|
应用服务中间件 PHP nginx
PHP知识笔记:CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI区别
PHP知识笔记:CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI区别
uiz
2865 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() 提供了更加强大的控制程序执行的能力。
1520 0
下一篇
无影云桌面