PHP多进程编程的详细解决方案

PHP多进程编程的详细解决方案
本文给出了PHP多进程编程的一个例子,供大家参考,如下:

第一步:

$ PHP m命令看到PHP是否安装,如果没有安装pcntl POSIX扩展

使用场景:

1。执行大量网络耗时的操作

2、我们需要做大量的计算,系统中有多个CPU。为了让用户体验更快,我们将任务划分为几个小任务,最后合并它们。

多进程公共函数

pcntl_alarm -建立一个过程报警的报警信号

pcntl_errno -别名pcntl_strerror

Pcntl_exec - executing a specified program in the current process space

pcntl_fork创建一个子进程,产生一个分支(子过程)在当前进程的当前位置。注释:叉创建子进程,父进程和子,从叉的位置启动过程。不同的是,父进程返回的叉值是子进程号,而子进程得到0。

pcntl_get_last_error检索的最后pcntl功能错误

pcntl_getpriority获得任何进程的优先级

pcntl_setpriority修改任何进程的优先级

pcntl_signal_dispatch -处理器调用等待信号

pcntl_signal安装信号处理器

pcntl_sigprocmask设置或检索阻塞信号

pcntl_sigtimedwait信号等待超时机制

pcntl_sigwaitinfo等待信号

pcntl_strerror检索与给定的错误相关的系统错误消息

pcntl_wait -等待或返回叉子进程的状态

pcntl_waitpid -等待或返回叉子进程的状态

pcntl_wexitstatus -返回子进程的中断返回代码

pcntl_wifexited -检查状态代码表示正常退出

pcntl_wifsignaled -检查子状态代码是通过一定的信号中断

pcntl_wifstopped检查孩子是否过程目前停止

pcntl_wstopsig回报使子进程停止信号

pcntl_wtermsig回报导致子进程的中断信号

例1:
< PHP
最早的过程也是父进程。
parentpid美元= getmypid();
返回原始父进程。parentpid美元。php_eol;
创建子进程,返回进程ID
PID = pcntl_fork(美元);
如果($ = = 1){
退出(叉错误);
}
后 / / pcntl_fork,父进程返回子进程的ID,和子进程返回0
echo'id:'。$ PID。php_eol;
如果($ = 0){
实施pcntl_fork / /子过程,PID是0,而不再是一个叉的新工艺
mypid美元=(getmypid); / / getmypid()函数来获取当前进程的PID
echo'i是子进程。我的PID是。mypid美元。我的父亲们。
{人}
在父/叉之后,返回是一个子进程PID,PID 0。
我的神echo'oh!我现在是父亲了!我的孩子PID。
}
AA = shell_exec美元(PS AF grep index.php | );
回声$ AA;

实例二:打开多个子进程以避免叉泛
< PHP
最早的过程也是父进程。
parentpid美元= getmypid();
返回原始父进程。parentpid美元。php_eol;
十打开子进程
($ i = 0;$ i < 10;$ + +){
PID = pcntl_fork(美元);
如果($ = = 1){
无法应答!;
出口(1);
}
过程
如果(!$ PID){
子进程工作
回声子过程。Getmypid()。php_eol;
(退出);在执行流程逻辑后立即退出,以免往下走,然后叉子进程,控制不好。
{人}
回声'父进程:'。Getmypid()。php_eol;
}
}
getmypid(回声)。php_eol;
AA = shell_exec美元(PS AF grep index.php | );
回声$ AA;

小心 uff1a

多进程的功能是通过pcntl_xxx系列功能。注:pcntl_xxx只能运行在PHP CLI(命令行)的环境中,在Web服务器环境中,会有意想不到的结果,请小心!

更多有关PHP相关内容的读者可以看到特别站:PHP进程和线程操作技巧总结

希望本文能对PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部