php-fpm中master与worker工作方式及关系

从事php开发以来,一直在理论上认为nginx的请求过来给了php-fpm,而php-fpm把请求给了master进程,master进行分配给worker,任务处理完成后,再由原路返回。

但今天仔细想了下,如果这样的话,根本就不需要有master进程了。直接php-fpm分配给worker就好了。

证实如下:

步骤一、设置php-fpm.conf,把pm设置为静态,worker个数为1

php-fpm中master与worker工作方式及关系_第1张图片

步骤二、设置完成后重新启动,查看php启动数量,一个master,一个worker

步骤三、打开2个窗口分别查看传输日志,使用strace 这个命令:strace -e network -p 9737

我在调用了:http://127.0.0.1:8001/api/car/index之后

php-fpm中master与worker工作方式及关系_第2张图片

worker:

php-fpm中master与worker工作方式及关系_第3张图片

由消息体可以看出,请求并没有通过master,而是直接通过worker的accept进行监听,接收,处理,返回。

也可以通过kill -HUP 9737把master进程杀死。worker依然可以接收请求。

那么master是做什么用的?

master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件,只是php-fpm采用的是poll方式来处理【此处结论是摘抄而来】.通过步骤三的第一张图确实能看得出来。

推荐阅读:

https://www.jianshu.com/p/578cf2e4892e

https://www.jianshu.com/p/c9a028c834ff

https://www.cnblogs.com/leezhxing/p/6220879.html

你可能感兴趣的:(php)