1的运行机制和原理。PHP+nginx+php-fpm的运行机制及原理Nginx是一种非阻塞IO&IO多路复用模型,通过操作系统提供类似epoll的功能,可以在一个线程中处理多个客户端请求。(非阻塞,无需等待返回)Nginx进程是线程,即每个进程中只有一个线程,但这个线程可以为多个客户端服务。PHP-FPM是阻塞式单线程模型,pm.max_children指定了最大进程数,pm.max_requests指定了每个进程在重启前处理了多少请求(因为PHP偶尔会出现内存泄漏,需要重启)。PHP-FPM的每个进程也只有一个线程,但是一个进程一次只能为一个客户端服务。(阻塞,需要等待PHP返回结果)大多数Linux程序倾向于使用进程而不是线程,因为Linux下创建进程的开销比较小,Linux的线程功能不是很强大。总结:1、nginx和php-fpm都是多进程的,每个进程只有一个线程;2、nginx的一个线程是非阻塞/io多路复用/epoll模型。请求分发后,无需等待,只监听回调结果。3、php-fpm的一个线程是阻塞模型。必须等待客户端请求php服务器返回数据,才能接受nginx的下一次请求。4.PHP本身是单进程单线程,它只是一种脚本语言。5、关于redis:redis是单进程单线程模型,也是非阻塞、I/O多路复用、epoll模型。(面试请回答:单线程。)其实严格来说,redis只是用单线程(I/O多路复用,epoll)来处理网络请求,数据处理和返回,里面还有其他线程来处理数据持久化rdb或aof。如图所示:
