PHP SAPI

sapi是PHP框架的接口层,它是进入PHP内部的入口,cli、fpm sapi是完整实现的应用程序。php

cli:html

     Command Line Interface 即命令行接口,用于在命令行下执行PHP脚本。cli是单进程模式,执行完请求后就直接关闭了。cli sapi的main函数位于sapi/cli/php_cli.c中。 内置web服务器,若是请求未指定执行哪一个PHP脚本,则默认执行目录下的index.php 或index.html,若是这两个文件都不存在则返回404nginx

 

fpm:golang

      FastCGI Process Manage 是PHP fastcgi 运行模式下的进程管理器,fastCGI是web服务区(nginx、apache)和处理程序之间的一种通讯协议,它只是一种协议,为了让PHP处理http请求,由于PHP并无像golang那也实现http网络库,而是实现了fastcgi协议,而后与web服务器配合实现了http的处理,web服务器来处理http请求,而后将解析的结果再经过fastcgi协议转发给处理程序,处理程序执行完以后再将处理结果返回给web服务器,web服务器再返回给用户。web

     PHP实现了fastcgi协议的处理,可是并无实现具体的网络处理,比较常见的网络处理模型:apache

     一、多进程模型:由一个主进程和多个子进程,主进程用来管理子进程,子进程用来处理基本的网络事件,nginx就是这种模型。api

     二、多线程模型:由主线程接听,接收请求,而后交给子线程处理,memcache就是这种模式。安全

     进程拥有独立的地址空间和资源,而线程没有,线程共享地址空间和资源,因此在资源管理上,多进程模型比较简单,而多进程模型则须要考虑不一样线程之间的资源冲突,也就是线程安全。服务器

     基本实现:网络

     fpm是一种多进程模型,它由一个master主进程和多个work子进程组成,master进程启动时会建立一个socket,可是不会接收、处理请求,而是由fork出来的多个work子进程进行接收、处理请求。

    master的主要工做是管理work子进程,好比当不少请求work进程处理不过来的时候,master进程会fork出来多个work进程进行出来,当没有那么多请求的时候,master进程会杀死部分空间的work进程,避免系统资源的浪费。

    fpm下不须要考虑并发致使的资源冲突

    fpm三种不一样的进程管理方式:

     一、静态模式

     二、动态模式

     三、按需模式

相关文章
相关标签/搜索