【PHP+nginx+php-fpm】探讨它们的运行机制和原理

一、PHP+nginx+php-fpm的运行机制和原理php

Nginx 是非阻塞IO & IO复用模型,经过操做系统提供的相似 epoll 的功能,能够在一个线程里处理多个客户端的请求。(非阻塞,无需等待返回) Nginx 的进程就是线程,即每一个进程里只有一个线程,但这一个线程能够服务多个客户端。 PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每一个进程处理多少个请求后重启(由于 PHP 偶尔会有内存泄漏,因此须要重启). PHP-FPM 的每一个进程也只有一个线程,可是一个进程同时只能服务一个客户端。(阻塞,需等待PHP返回结果)
大多数的 Linux 程序都倾向于使用进程而不是线程,由于 Linux 下相对来讲建立进程的开销比较小,而 Linux 的线程功能又不是很强大。 0

 

总结:nginx

一、nginx和php-fpm都是多进程,一个进程只有一个线程;面试

二、nginx一个线程是非阻塞/io多路复用/epoll模型,将请求分发后无需等待,仅监听回调结果redis

三、php-fpm一个线程是阻塞模型,必须等待该客户端请求php服务端返回数据,下一个nginx发过来的请求才能被受理网络

四、PHP自己是单进程单线程的,它只是脚本语言。php-fpm

 

五、关于redis:redis是单进程单线程模型,它也是非阻塞、I/o多路复用、epoll模型。(面试请回答:单线程。)spa

                    其实严格来讲,redis只是在处理网络请求、数据处理及返回使用的是 单线程(I/O多路复用、epoll),它内部还有其余线程 用来处理数据持久化rdb或aof。如图:操作系统

相关文章
相关标签/搜索