工作原因,要用到php多进程,于是粗略的了解一下,完成之后把过程记录下来,整理成教程,希望对学习php多进程编程的程序员有所帮助。
前言
使用php cli的时候,我们在终端会这样
php hello.php
运行一个hello.php程序,这样linux会为我们创建一个进程。不考虑 nohup ,在一个终端,我们以cli方式运行的php程序也只能有这一个进程。一个进程处理的任务必定是有限的,在系统资源空闲那么多的情况下,为什么不使用多进程来提高效率呢?
不过php多进程需要安装pcntl和posix扩展(windows不支持)
fork,创建子进程
创建子进程的方法就是fork,在php里面,这个函数是pcntl_fork()
pcntl_fork作用就是创建和当前进程一样的子进程,这个子进程代码段和当前进程一模一样,但是拥有自己的数据段。看一个最简单的创建子进程的方法
$pid = pcntl_fork();
if( $pid == -1 ){
exit("fork error");
}
if( $pid == 0 ){
//子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
echo "child process{$pid}\n";
}else{
//父进程fork之后,返回的就是子进程的pid号,pid不为0
echo "parent process{$pid}\n";
}
可以这样解释:pcntl_fork之后,系统会再次启动一个进程,重新运行当前的代码,就酱~
运行结果如下
可以看到,父进程经过pcntl_fork之后,反回了一个pid为3558,下面ps的进程号有一个3558,那就是经过fork之后的子进程啦
来看一下进程(之前我在hello.php里面sleep了几十秒,所以程序未退出)
这样,一个简单地多进程就出来了。如果要执行任务,那么就可以直接把任务的代码放到条件里面去就可以啦
赞赏