从事php开发以来,一直在理论上认为nginx的请求过来给了php-fpm,而php-fpm把请求给了master进程,master进行分配给worker,任务处理完成后,再由原路返回。
但今天仔细想了下,如果这样的话,根本就不需要有master进程了。直接php-fpm分配给worker就好了。
证实如下:
步骤一、设置php-fpm.conf,把pm设置为静态,worker个数为1
步骤二、设置完成后重新启动,查看php启动数量,一个master,一个worker
步骤三、打开2个窗口分别查看传输日志,使用strace 这个命令:strace -e network -p 9737
我在调用了:http://127.0.0.1:8001/api/car/index之后
worker:
由消息体可以看出,请求并没有通过master,而是直接通过worker的accept进行监听,接收,处理,返回。
也可以通过kill -HUP 9737把master进程杀死。worker依然可以接收请求。
那么master是做什么用的?
master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件,只是php-fpm采用的是poll方式来处理【此处结论是摘抄而来】.通过步骤三的第一张图确实能看得出来。
来源:https://blog.csdn.net/zizhilianqiu/article/details/90374255