博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP的pcntl多进程
阅读量:7175 次
发布时间:2019-06-29

本文共 864 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
IBATIS事务处理 - - 博客频道 - CSDN.NET
查看>>
编程算法基础-数字数码管-隐藏password
查看>>
C++ - new与malloc的差别
查看>>
使用Html和ashx文件实现其简单的注册页面
查看>>
ZeroMQ接口函数之 :zmq_inproc – ØMQ 本地进程内(线程间)传输方式
查看>>
C#语言基础原理及优缺点
查看>>
AIX系统开启ftp服务
查看>>
Android线程之AsyncTask
查看>>
linux 上拷贝文件到windows 上 文件出现锁的文件
查看>>
Xamarin iOS教程之编辑界面编写代码
查看>>
Construct Binary Tree from Preorder and Inorder Traversal
查看>>
写得好 git 提交信息
查看>>
Linux下获取线程TID的方法
查看>>
Redis和Memcache的区别分析(转)
查看>>
servlet容器与web容器的概念
查看>>
网络请求 http get post 一
查看>>
《计算机问题求解》总结——2014年CCF计算机课程改革导教班(2014.07.11)
查看>>
Google Chrome Plus——绿色便携多功能谷歌浏览器
查看>>
Instant Run
查看>>
史上最详细的iOS之事件的传递和响应机制
查看>>