nginx-3 多进程

在这里插入图片描述
nginx的master管理进程与worker工作进程。(上图)

我们在nginx-2的基础上,用php的pcntl多进程控制模块来演示原理,workman源码中也有pcntl的内容,此篇简单看一下即可。

注意

  1. pcntl在php手册可查阅
  2. 它只能在linux上使用
  3. 实际开发中进程建议使用swoole

pcntl 是php进程控制的一个扩展。百度pcntl,
在这里插入图片描述
重点 点击查看 pcntl_fork 函数,fork 翻译为分叉,我们常说fork一个子进程 即创建一个子进程。详细请看 手册 。

往下翻有一个范例

<?php

$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
    //错误处理:创建子进程失败时返回-1.
     die('could not fork');
} else if ($pid) {
     //父进程会得到子进程号,所以这里是父进程执行的逻辑
     pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
} else {
     //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
}

?>

那么把这一段代码应用到《nginx-2》的代码中就实现了多进程处理http请求的方式。

在这里插入图片描述
接下来把红框内的部分,放进子进程中,每个http请求用一个子进程来处理。

在这里插入图片描述
这样每个http请求都有单独的一个子进程来处理,对比单进程,提高了效率。

附:linux安装pcntl扩展

如果要使用此扩展,需要在编译安装php时指定安装此模块,而通常并没有指定该模块。所以可以选择重新编译安装php,或者下载对应php版本的pcntl扩展,单独安装此模块。这里选择后者。

  1. 下载对应服务器php版本的php源码包 官网 http://php.net/releases/

打开后为各个版本的php下载压缩包

  1. 查看php版本
php -v
//7.2.8
  1. ctrl + F 查找7.2.8
    在这里插入图片描述

  2. 点击tar.gz下载
    在这里插入图片描述

  3. 传输至linux,解压,到ext目录查找pcntl

 tar -zxvf php-7.2.8.tar.gz
 cd php-7.2.8/ext

在这里插入图片描述

  1. 编译安装
cd pcntl
phpize
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
找到服务器的php.ini目录
cd /www/server/php/72/etc
echo "extension=pcntl.so" >> /etc/php.ini

猜你喜欢

转载自blog.csdn.net/yt_php/article/details/86630867
今日推荐