一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能. 每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程. 每个worker进程能保持一个到MySQL/Memcached/Redis的持久连接,实现"连接池",避免重复建立连接,对程序透明. 使用数据库持久连接时应该设置固定数量的worker进程数,不要使用动态的prefork模式. 经 @syaokun219 和 @IM鑫爷 纠正,以下两句有误: master进程采用epoll模型异步接收和分发请求,listen监听端口,epoll_wait等待连接. 然后分发给对应pool里的worker进程,worker进程accept请求后poll处理连接. 应该是: master进程并不接收和分发请求,而是worker进程直接accept请求后poll处理. master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件. 这里提一下,Nginx也类似,master进程并不处理请求,而是worker进程直接处理,